BCD码
8421是最常见的BCD码,其中1010~1111是不使用的。
校验码——奇偶校验码
奇(偶)校验码:所有数(包括校验位)加在一起是奇数(偶数)。
校验码——循环冗余码CRC(主要用来检错)
商不重要!!数据+余数是最终的CRC码。
CRC的特点:
- 具有r检测位的多项式能够检测出所有小于或等于r的突发错误。
- 长度大于r+1的错误逃脱率是 1 / 2 r 1/2^r 1/2r
校验码——海明码(有一位纠错能力)
(n,k)海明码中n是加上码之后的总长度,k是数据位数。冗余位=n-k=r
重要不等式:
2 r > = k + r + 1 2^r>=k+r+1 2r>=k+r+1
r是校验码位数,k是数据位数。
例:数据为101110110
k=9,则r至少为4才满足不等式n=k+r=13
然后列表(标号从右往左标,数据写入直接从左往右抄下来):
13(1101) | 12(1100) | 11(1011) | 10(1010) | 9(1001) | 8(1000) | 7(0111) | 6(0110) | 5(0101) | 4(0100) | 3(0011) | 2(0010) | 1(0001) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 0 | 1 | 1 | 1 | 校验位 | 0 | 1 | 1 | 校验位 | 0 | 校验位 | 校验位 |
然后计算各校验位
找到数字为1的标号:13(1101)、11(1011)、10(1010)、9(1001)、6(0110)、5(0101)
把这些数不进位的加在一起1+1=0,0+0=0,1+0=1
得0110,从左到右填到表里的检验位
13(1101) | 12(1100) | 11(1011) | 10(1010) | 9(1001) | 8(1000) | 7(0111) | 6(0110) | 5(0101) | 4(0100) | 3(0011) | 2(0010) | 1(0001) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 |
海明距
L − 1 = D + C 且 D > = C L-1=D+C 且 D>=C L−1=D+C且D>=C
L是海明距,D是检测出的错误位数,C是纠正的错误位数。
浮点数
规格化浮点数
对于阶的基数是 2 r 2^r 2r的浮点数
原码 | 补码 | |
---|---|---|
正数/负数 | 尾数前r个不全是0 | 符号位和尾数前r个不完全一样 |
IEEE 754标准浮点数
数符(一位)+阶码+尾数
阶码用移码表示、尾数用原码。这里的移码和普通移码不一样,是在原数值上 + 2 n − 1 − 1 +2^{n-1}-1 +2n−1−1,n是阶码位数。
符号位S | 阶码 | 尾数 | 总位数 | 偏置值 | |
---|---|---|---|---|---|
短实数 | 1 | 8 | 23 | 32 | 127 |
长实数 | 1 | 11 | 52 | 64 | 1023 |
临时实数 | 1 | 15 | 64 | 80 | 16383 |
特别说明 阶码全0和阶码全1有自己的特别意义,在求IEE 754表示的最大最小范围的时候应该注意!
IEEE 754标准可以看成规格化浮点数的再规范,IEEE 754规格化数不需要遵循规格化浮点数标准,它有自己的标准
定点数和浮点数
- 移码=补码符号位取反
- 定点数发生溢出直接报错,浮点数尾数溢先考虑阶码对阶。
加减计算注意的地方
1、单符号位时,符号位和最高位不同的时候产生溢出。
2、双符号位时,符号位10是负溢出,01是正溢出。
3、不管双符号还是单符号,都需要溢出判断电路,一般用“异或”门来实现。
乘除计算注意点
1、补码一位乘法中最多n次移位,n+1次加减法。原码最多均为n。
2、在不恢复余数除法中,最终余数为负时候,才需要一次恢复余数。