From 7afda3e86e5d26683206b59859049002fd25bd1e Mon Sep 17 00:00:00 2001 From: Didnelpsun <2675350965@qq.com> Date: Tue, 18 May 2021 23:50:56 +0800 Subject: [PATCH] Update 1-data-representation-and-operation.md --- .../1-data-representation-and-operation.md | 159 +++++++++++++++++- 1 file changed, 158 insertions(+), 1 deletion(-) diff --git a/Computer-Organization/1-data-representation-and-operation.md b/Computer-Organization/1-data-representation-and-operation.md index 274495b..afe6a13 100644 --- a/Computer-Organization/1-data-representation-and-operation.md +++ b/Computer-Organization/1-data-representation-and-operation.md @@ -190,11 +190,168 @@ k|2|3|4|5|6|7 1. 数据发送、接受方约定一个“除数”。 2. K个信息位+R个校验位作为“被除数”,添加校验位后需保证除法的余数为0。 3. 收到数据后,进行除法检查余数是否为0。 - ++ 得到CRC码的方法: + 1. 确定K和R以及生成多项式对应的二进制码。其中R位生成多项式的最高次幂数。 + 2. 将信息码左移R位,低位补0。 + 3. 使用模二除法。 + 4. 余数就是校验位,只比多项式少一位。 + 5. 对全部数据进行多项式除,余数为0代表无措。 + 6. 若余数不为0,则出错。 + 7. 若$n$个信息位,$k$个校验位,若生成多项式得当,且$2^k\geqslant n+k+1$,则CRC码可纠正一位错。实际上基本上不怎么用来纠错。 ## 定点数 +指小数点的位置不变,使用常规计数法,如96.94。 + +### 定点数表示 + +#### 无符号数 + ++ 整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值。 ++ $n$位无符号数表示范围为$[0,2^n-1]$。 ++ 无符号数不涉及小数。 + +#### 有符号数 + ++ 定点整数:最高一位是符号位,0是正,1是负,小数点位置一般隐含在最后。 ++ 定点小数:最高一位是符号位,0是正,1是负,小数点位置隐含在符号位后面。 ++ 数值部分也称为尾数。要保存一个非整数需要保存定点整数与定点小数两个部分。 + +#### 原码 + ++ 原码:用尾数表示真值的绝对值,符号位“0/1”对应“正/负”。 ++ 若机器字长为n+1位,则尾数占n位。 ++ 若使用1B来保存数值,则+19D就是0001 0011,-19D就是1001 0011。 ++ 有时1001 0011会写为1,0010011,其中的逗号只是为了标注正负号,本身是不存在的。 ++ 若未指明机器字长,则最开头的多个0可以省略。如1001 0011可以表示为1,10011。 ++ 同理小数也可以使用1.11表示,这是指-0.11。 ++ 若机器字长$n+1$位,则原码整数的表示范围是$[-(2^n-1),2^n-1]$。 ++ 若机器字长$n+1$位,则原码小数的表示范围是$[-(1-2^{-n}),1-2^{-n}]$。 ++ 原码表示时真值0有+0和-0两种形式。 + +#### 反码 + ++ 反码:若符号位为0,则反码与原码相同,若符号位为1,则数值位全部取反。 ++ 可以转换为原码再取反。 ++ 若机器字长$n+1$位,则反码整数的表示范围是$[-(2^n-1),2^n-1]$。 ++ 若机器字长$n+1$位,则反码小数的表示范围是$[-(1-2^{-n}),1-2^{-n}]$。 ++ 反码表示时真值0有+0和-0两种形式。 ++ 反码只是由原码转换为补码的一个中间态,实际上并没有作用。 + +#### 补码 + ++ 补码:若符号位为0,则反码与原码相同,若符号位为1,则数值位全部取反再加一,即反码加一。 ++ 补码表示时真值0只有一种形式0000 0000。 ++ 多出来的一种形式1000 0000表示$-2^7$和$-1$。 ++ 若机器字长$n+1$位,则补码整数的表示范围是$[-2^n,2^n-1]$。 ++ 若机器字长$n+1$位,则补码小数的表示范围是$[-1,1-2^{-n}]$。 ++ 将负数补码转回原码的方法相同:尾数取反,末位加一。补码的补码就是原码。 ++ 如果已知一个数值的补码,那么求这个值的负数的补码就是全部位取反,末位加一。 ++ 如果已知一个负数的补码,那个求这个值的原码就是数值位取反再加一,或是负数补码中,最右边的1以及右边不变,最右边的1的左边取反。 + +#### 移码 + ++ 补码的基础上将符号位取反。 ++ 移码只能用于表示整数,而不能表示定点小数。 ++ 若机器字长$n+1$位,则移码整数的表示范围是$[-2^n,2^n-1]$。 ++ 若机器字长$n+1$位,则移码小数的表示范围是$[-1,1-2^{-n}]$。 ++ 移码由于负数的最高位为0,正数的最高位为1,从而能更方便对比大小。 + +机器数|无符号数|原码|反码|补码|移码 +:----:|:------:|:--:|:--:|:--:|:--: +0000 0000|0|+0|+0|0|-128 +0000 0001|1|+1|+1|+1|-127 +... +0111 1101|125|+125|+125|+125|-3 +0111 1110|126|+126|+126|+126|-2 +0111 1111|127|+127|+127|+127|-1 +1000 0000|128|-0|-127|-128|0 +1000 0001|129|-1|-126|-127|1 +1000 0010|130|-2|-125|-126|2 +... +1111 1101|253|-125|-2|-3|125 +1111 1110|254|-126|-1|-2|126 +1111 1111|255|-127|-0|-1|127 + +#### 补码作用 + ++ 原码在计算时由于首位表示的是符号,所以需要考虑将加减运算转换的问题,而减法实现起来比较困难,就考虑是否可以将减法通过加法来实现。 ++ 由于计算机码操作若最高位进一就被舍弃,则天然是进行模运算,所以可以通过数学模运算来实现机器码的运算。 ++ 带余除法:设$x,m\in Z$,$m>0$则存在唯一决定的整数$q$和$r$,使得$x=q\cdot m+r\,,0\leqslant r