真值和机器数的互换
[原码,补码,反码,移码]
- 原码:符号位+绝对值的二进制。
- 补码:正数:补码等于原码;负数:除符号位外,各位取反末位加1
- 反码:正数:反码等于原码;负数:除符号位外,各位取反
- 移码:补码符号位取反
- 8421BCD码:每四位二进制表示一位十进制数,范围是[0,9]。
- 余三码:8421的基础上加3.
8421BCD码和余三码一般用于表示字符串,不用于计算
校验码
数据再计算机传输过程中会出现错误,错误会引起歧义,所以需要校验码。
码距是指两个码组对应位上数字的不同位数称为码组的距离,又称为汉明距离。码距为1时不具备校验能力。
通信双方的大工程某种共识:校验方法、校验位数、校验位置
1.奇偶校验码
以奇校验码为例:
最高位为校验位,最高位补0或1是校验码中1的个数为奇数。
数据:01010101
发送方:奇校验 1 01010101(1的个数右奇数个)
接收方:
没错:101010101----01010101(去掉校验位)
1位错:(1) 1 11010101
(2) 0 01010101(1的个数为偶数了,可以检验到错误)
2位错: 1 10010101(此时1的个数为奇数,不能检验到错误)
优点:简单,传输效率高
缺点:只能发现错误,不能修改错误;只有当奇数个位数出错时才能被发现。
2.Hamming校验码
发送方:
1、校验位的位数
(1)仅能发现并修正一位错
假设数据位D(d位),校验位R(r位)
2r>=d+r+1
(2)发现修正一位错,并发现两位错
2r-1>=d+r
2.校验位的位置
海明码的下标为2i的位置上,或者海明码最高位
设数据位d=8,推出r=5
H13 H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
R5 D8 D7 D6 D5 R4 D4 D3 D2 R3 D1 R2 R1
3.校验位的值
(1)确定校验关系:数据位在海明码中的下标=参与校验的校验位的下标和
D1(3=2+1) R2 R1
D2 (5=4+1) R3 R1
D3 (6=4+2) R3 R2
D4 :R3 R2 R1
D5: R4 R1
D6:R4 R2
D7 :R4 R2 R1
D8:R4 R3
2)确定校验位的值=它参与校验的数据位的抑或
R1=D1^D2^D4^D5^D7
R2:D1^D3^D4^D6^D7
R3:D2^D3^D4^D8
R4:D5^D6^D7^D8
R5:(D1^...^D8)^(R1^...^R5)
接收方:
S1=R1'^(D1'^D2’^D4’^D5‘^D7’)
S2=R2‘^(D1’^D3‘^D4’^D6‘^D7’)
S3=R3'^(D2‘^D3’^D4‘^D8’)
S4=R4'^(D5‘^D6’^D7‘^D8’)
S5=R5^(D1^...^D8)(R1^...^R5)
(1)没有错误 S5=0 S4S3S2S1=0000
(2)发生一位错
I.D2出错 S5 =1 S4S3S2S1=0101=5->H5,即出错位置在汉明码的下标
II. D5出错 S5 =1 S4S3S2S1=1001
III.校验位R1出错 S5 =1 S4S3S2S1=0001
(3) 发生两位错:
设数据位D1和D3出错:S5 =0 S4S3S2S1=0101
3.CRC 循环冗余校验码
模2运算
(1)模2加减运算—异或运算
eg:1010-1101=1010+1101=1010^1101
(2)模2除法运算:依托模2减法。根据被除数或者余数的最高位决定是否做模2减法,如果最高位1则做模2减法,否则不做减法
生成多项式
生成多项式是一串二进制编码,G。
假设数据位为D(位数为d),G位数为r+1位
发送方:
1.将D左移r位,低位补0,形成d+r位信息位M
2.M模2除G,得到商和r位余数
3.生成CRC编码=M+余数
接收方:
CRC编码模2除G=(M’+余数‘)/G
没有错误:余数为0,M’=M 余数’=余数
(M’+余数‘)/G=(M+余数)/G=M/G+余数/G=商+余数/G+余数/G=商+(余数+余数)/G=商
如果出错:根据余数情况修改或者判断错误
定点数的表示
定点数:小数点固定的数,纯小数或者纯整数
1.N位二进制数原码的表示范围:
整数:
小数:
2.N位二进制数补码的表示范围:
整数:
小数:
定点数的运算—加减
1.原码加减—不适合做加减运算
(1)判断结果的符号
(2)相加或者用||被减数|-|减数||
(3)结果
2.补码加减
[A+B]补=[A]补+[B]补
[A-B]补=[A]补+[-B]补
优点:直接运算
定点数的运算—溢出的判断
双符号位法:两个符号位同时运算,双符号位不同则溢出,上溢和下溢。
1.逻辑移位:逻辑左移,逻辑右移
移出位移走,补位位补0
eg:1010
左移:0100
右移:0101
2.小循环移位:小循环左移,小循环右移
移出移入到补位位,同时移入到标记为C中
在数字最前和最后分别有一个C位,储存溢出位
eg: 1010
左移:1 0101
右移:0101 0
3. 大循环移位:大循环左移,大循环右移
移出位移入到C位,C位移入到补位位
eg:0 1010
左移:1 0100
右移:0101 0
4.算术移位
(1)保留数值的数学意义,左移相当于乘以2,右移相当于除以2
(2)存在溢出或精度丧失
原码:符号位不动,数值位逻辑左右移
补码:带差符号位一起移动
溢出位移出,补位位:高位补符号位,地位补零。
5.溢出过半
原码:符号位为0或1,数值位最高位为1
补码:符号位为0,数值最高位为1;符号位为1,数值最高位为0.