一、10进制——>2进制
1、正整数
除2取余,从下往上,位数不足2的幂次时,高位补0
例:
25----0001 1001
25/2=12=======余1
12/2=6========余0
6/2=3=========余0
3/2=1=========余1
1/2=0=========余1
2、正小数
乘2取整,从上往下
例:
0.7----0.10110011001100110011001100110011001100110011001100111
0.7*2=1.4========取出整数部分1
0.4*2=0.8========取出整数部分0
0.8*2=1.6========取出整数部分1
0.6*2=1.2========取出整数部分1
0.2*2=0.4========取出整数部分0
0.4*2=0.8========取出整数部分0
0.8*2=1.6========取出整数部分1
0.6*2=1.2========取出整数部分1
0.2*2=0.4========取出整数部分0
……
3、负整数
绝对值转二进制,然后取反,最后对结果+1,位数不足2的幂次时,高位补1(这里是补码,要求原码直接将正数的最高位取反)
-25-----1110 0111
25/2=12=======余1
12/2=6========余0
6/2=3=========余0
3/2=1=========余1
1/2=0=========余1
1 1001---取反---0 0110---+1---0 0111----补1---1110 0111
4、负小数
二、2进制——>10进制
1、正整数
0001 1001 ---- 25
2^4 + 2^3 + 2^0 = 16 + 8 + 1 = 25
2、正小数
0.10110011001100110011001100110011001100110011001100111 ---- 0.7
0 * 2^0 + 1 * 2^-1 + 0 * 2^ -2 + 1 * 2^-3 + 1 * 2^-4 ……= 0.7
3、负整数
1110 0111 ------ -25
先取反 0001 1000,再 +1 = 0001 1001
2^4 + 2^3 + 2^0 = 16 + 8 + 1 = 25
取反 = -25
4、负小数
三、原码、反码、补码
1、正整数的原码、反码和补码都一样。
2、负数原码<—>反码转换:符号位不变,数值位按位取反
3、负数原码<—>补码转换:符号位不变,数值位按位取反+1
4、正整数原码<—>负数原码:符号位取反
5、正整数反码<—>负数反码:符号位和数值位都取反
6、正整数补码<—>负数补码:符号位和数值位都取反+1
7、原码<—>移码转换:先把这个数化为补码,然后再根据补码的第一位数字取反即可。
真值:25 -25
原码:0001 1001 1001 1001
反码:0001 1001 1110 0110
补码:0001 1001 1110 0111
移码:1001 1001 0110 0111
四、浮点数
用IEEE754将数表示为单精度浮点数
176.0625->10110000.0001
->1♦01100000001*2^7 (阶码:7,尾数:01100000001)
单精度尾数长度:23,双精度尾数长度:52
->01100000001000000000000
单精度偏移量:127,双精度偏移量:1023
单精度指数长度:8 (-126~127),双精度指数长度:11 (-1022~1023)
阶码E=7+127=134=10000110
单精度浮点数为:0 10000110 01100000001000000000000
单精度浮点数长:32 (10^-38~10^38),双精度浮点数长:64 (10^-308~10^308)
浮点数运算
加减:
1、对阶。阶码小的阶码+k,尾数右移k位;
2、求尾数和(差);
3、结果规格化,并判溢出。非规格化要转规格化,尾数溢出要调整阶码;
4、舍入处理。尾数最低为因移出而丢掉,就需要舍入处理,以求得最小运算误差;
5、溢出判别。以阶码为准,若阶码溢出,则结果溢出。若阶码下溢(小于最小值),则结果为0,否则结果正确,无溢出。
乘除:结果都需要进行规格化处理,并判断阶码是否溢出。
乘:
阶码相加,尾数相乘。
除:
阶码相减,尾数相除。
五、海明码
例:1100 1110
1、
根据原始信息位数n求出k——>n=8,k=4
校验码是放在2的幂次位上的,如 1,2,4,8,16…等
故校验码为:1,2,4,8
2、
位置 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|
原始信息位 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 |
位置 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
加入校验码后的信息位 | 1 | 1 | 0 | 0 | H4 | 1 | 1 | 1 | H3 | 0 | H2 | H1 |
3、
位置 | 二进制 | |
---|---|---|
1 | 0001 | |
2 | 0010 | |
3 | 0011 | H1+H2 |
4 | 0100 | |
5 | 0101 | H1+H3 |
6 | 0110 | H2+H3 |
7 | 0111 | H1+H2+H3 |
8 | 1000 | |
9 | 1001 | H1+H4 |
10 | 1010 | H2+H4 |
11 | 1011 | H1+H2+H4 |
12 | 1100 | H3+H4 |
校验码 | 出现的位置 | 对应的值异或 | 结果 |
---|---|---|---|
H1 | 3、5、7、9、11 | 0⊕1⊕1⊕0⊕1 | 1 |
H2 | 3、6、7、10、11 | 0⊕1⊕1⊕0⊕1 | 1 |
H3 | 5、6、7、12 | 1⊕1⊕1⊕1 | 0 |
H4 | 9、10、11、12 | 0⊕0⊕1⊕1 | 0 |
位置 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
最终信息位 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 |
4、查错
接受到的数据:1100 1110
位置 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
加入校验码后的信息位 | 1 | 1 | 0 | 0 | H4 | 1 | 1 | 1 | H3 | 0 | H2 | H1 |
最终信息位 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 |
G1=H1⊕0⊕1⊕1⊕0⊕1=0
G2=H2⊕0⊕1⊕1⊕0⊕1=0
G3=H3⊕1⊕1⊕1⊕1=0
G4=H4⊕0⊕0⊕1⊕1=0
G4G3G2G1=0000
都为0则没出现错误,否则出错,如G4G3G2G1=1010,则第10个位置0,数据出错
注:以上为偶校验,采用异或和全为0来判断,奇校验采用取反和全为1来判断。
参考:https://blog.csdn.net/coolskyying/article/details/78963550