计算机组成原理:定点数和浮点数、校验码

1、定点数和浮点数

小数点在计算器中并没有专门的器件进行存放。根据小数点的位置是否固定,可将数字分为定点数浮点数

定点数

定点数是小数点位置固定的数,小数点的位置由事先约定。同一种定点数的机器码中,每一位的权值都是相同的。
约定小数点在最低数值位之后的定点数称为定点纯整数;在最高数值位之前的称为定点纯小数。采用定点数的机器称为定点机
设8位机器码,其中最高位为符号位
对于定点整数机
原码和反码的数值范围:-27 + 1 ~ 27 - 1
补码的数值范围:-27 ~ 27 - 1
对于定点小数机
原码和反码的数值范围:-1 + 2-7 ~ 1 - 2-7
补码的数值范围:-1 ~ 1 - 2-7

当数值超出定点数所能表示的范围时,称为溢出

浮点数

浮点数是小数点位置不固定的数。
浮点数在计算机中由两个部分组成:阶码尾数
在这里插入图片描述
其中,尾数表示数值的有效数字,阶码指出小数点的位置。
对于阶码共k + 1位,尾数共n + 1位的浮点数(均包含符号):
最大正数:(1 - 2-n) * 22^k-1
最小负数:-1* 22^k-1
绝对值最小的数(除0外):± 2-n * 2-2^k

阶码和尾数均以补码表示。

规格化浮点数

由于一个数值可以有多个不同的浮点数加以表示,为了规范数值的表示,应当以一定的条件加以约束,称为规格化浮点数
规格化浮点数的约束条件:对于尾数M,应有0.5 ≤ |M| ≤ 1
对于原码,其最高数值位一定为1。
对于补码,其符号位与最高数值为互异。

IEEE-754标准

IEEE-754标准定义了三种浮点数的基本格式:单精度格式双精度格式扩展精度格式

对於单精度和双精度格式,IEEE-754标准规定小数点左边隐含一位,作为整数的个位数。该位规定为1,不需要存储,自动计算。由于隐含位在个位上,相比于规格化浮点数的标准左移了一位,因此阶码需要-1以匹配。

对于阶码,实际为移码-1;或者可以使用原码+偏移量计算
单精度格式:阶码位数为8,尾数数值位数为23,总32位
双精度格式:阶码位数为11,尾数数值位数为52,总64位
扩展精度格式:阶码位数为15,尾数数值位数为64,总80位

由于隐含位,单精度和双精度格式的尾数实际尾数分别为24和53。

对於单精度格式,阶码取值范围是-126 ~ 127。

这个地方也是我不太明白的一点。经过查找资料后个人的理解是:阶码全0和全1是特殊情况;全0对应的补码是10000001,为-127,全1对应的补码是10000000,为-128。因此这两个取值应该排除。从偏置常数看,-127和-128偏置后为0和-1,无法用8位机器码表示。

IEEE-754标准的浮点数公式: V = (-1)ms * 22^E-127 * M
十进制转单精度步骤:1) 转二进制 2) 规格化 3) 求阶码 4) 拼接 5)*四合一转十六进制
单精度转十进制步骤: 1)* 一拆四转二进制 2)分段 3)求阶码的原码 4)计算真值

2、校验码

在数据的存取传送过程中,由于外界高频的干扰、设备的间歇性故障、电源偶然的瞬变现象等原因,会发生错误。为了减少这种错误,除了提高硬件本身的可靠性外,通常是通过增加一些冗余码,使合法数据编码出现某些错误,称为非法码,来检测错误。码距是任意两个编码间互异的位数。码距为2的的校验码才具有纠错能力。

奇偶校验码

有效信息加上一位校验码,可以形成奇偶校验码。这是最简单的一种校验码。
奇校验:加上校验位后,校验码为1的位数是奇数。 ~C = x1 ⊕ x2 ⊕ … ⊕ xn (奇数个1和任意个0异或得1;偶数个1得0)
偶校验:加上校验位后,校验码为1的位数是偶数。 C = x1 ⊕ x2 ⊕ … ⊕ xn
奇偶校验码能检查一位出错,但不能判断出错的位置。

海明校验码

海明校验码是一种能够定位一位出错,并能发现两位出错的校验码,且能恢复一位出错位的校验码。
设有效码共k位,校验位共r位,若需要定位一位错误,则有海明不等式1:2r ≥ k + r + 1;(k+r位可能出错,加上正确情况)
若还需要检查两位错误,则有海明不等式2: 2r-1 ≥ k + r。 (需要其它情况表示2位出错)

海明校验码码编码规则

  1. 设海明校验码最高位为m,最低位为1,则海明校验码可以表示为:H(m)H(m-1)…H(1)
    其中,H(2i-1)由校验位R(i)占据,剩余位置由有效码K(i)由小到大占据;若不存在H(2i-1),则R(i)占据最高位。
    例如十三位海明校验码(其中5位校验位,8位有效码): R(5)K(8)K(7)K(6)K(5)R(4)K(4)K(3)K(2)R(3)K(1)R(2)R(1)
  2. 每一个海明校验码的位号,等于检验他的校验位位号之和。例如H(3):3 = 2 + 1;因此H(3)由H(2)和H(1)校验。相当于每一个校验位,都是被其校验的有效码的奇偶校验位

有效位的位号必须等于校验位位号和;校验位位号之和就等于本身。

  1. 以偶校验为例,可以得到方程组:
    P1 = D1 ⊕ D2 ⊕ D4 ⊕ D5 ⊕ D7
    P2 = D1 ⊕ D3 ⊕ D4 ⊕ D6 ⊕ D7
    P3 = D2 ⊕ D3 ⊕ D4 ⊕ D8
    P4 = D5 ⊕ D6 ⊕ D7 ⊕ D8
    P5 = D1 ⊕ D2 ⊕ D3 ⊕ D4 ⊕ D5 ⊕ D6 ⊕ D7 ⊕ D8 ⊕ P1 ⊕ P2 ⊕ P3 ⊕ P4 (令最高位等于所有其它海明码异或)
    利用该方程组,可以形成海明校验码。

检错时,令校验位与需要检验的校验码做异或运算,可以得到方程组:
S1 = P1 ⊕ D1 ⊕ D2 ⊕ D4 ⊕ D5 ⊕ D7
S2 = P2 ⊕ D1 ⊕ D3 ⊕ D4 ⊕ D6 ⊕ D7
S3 = P3 ⊕ D2 ⊕ D3 ⊕ D4 ⊕ D8
S4 = P4 ⊕ D5 ⊕ D6 ⊕ D7 ⊕ D8
S5 = P5 ⊕ D1 ⊕ D2 ⊕ D3 ⊕ D4 ⊕ D5 ⊕ D6 ⊕ D7 ⊕ D8 ⊕ P1 ⊕ P2 ⊕ P3 ⊕ P4
显然,如果该位没有出错,则相当于自身与自身做异或运算,结果必然为0
反之,若某一个校验结果为1,说明该位所校验的数据出错
若仅考虑一位出错和两位出错,有如下几种情况:
1、S1~S5全为0:数据无错误;
2、S5 = 0;S1~S4不全为0:有两位出错;
3、S5 = 1;S1~S4全为0:P5出错;
4、S5 = 1;S1~S4仅一位为1:对应的那一位校验位出错;如S1 = 1,说明P1出错;
5、S5 = 1;S1~S4多位为1:可通过出错的S的共同检验元素,定位出错的位置;如S1,S2 = 1,说明D1出错。

循环冗余码(CRC码)

CRC码可以发现并纠正信息存储或传送过程中连续出现的多位错误,因此在磁介质存储和计算机之间通信方面得到广泛应用。
CRC码由k位信息码后接r位校验位组成,利用模2运算规律。

CRC码编码规则

  1. 将信息码表达为多项式M(x) = Ck-1 * xk-1 + … + C1 * x1 + C0;
  2. 将信息码左移r位,得到M(x) * xr = Ck-1 * xk+r-1+ … + C0 * xr
  3. 用M(x) * xr 除以用以生成多项式 G(x),所得余数作为校验位。为使校验码为r位,由模2运算的规律可知,G(x)必为 r + 1位。
  4. 设上一步的运算中所得商为Q(x),所得余数为R(x),将R(x)拼接至M(x) * xr 右边空出的r位上,构成该信息的CRC码。
    该CRC码 M(x) * xr + R(x) = [Q(x) * G(x) + R(x)] + R(x) = Q(x) * G(x) + 2R(x);
    由模2加法,2R(x)应为0;因此上式 = Q(x) * G (x),也即该CRC码必能被G(x)除尽。

检错时,用得到的CRC码除以生成多项式G(x),如果未出错,应得到余数0;不同位出错时,余数不同。可以证明,在码制和生成多项式不变时,余数与出错位的关系是不变的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章