1.0 进制转换
1.1 进制缩写
- 二进制 B
- 八进制 O
- 十进制 D
- 十六进制 H
1.2 其他进制 转换 十进制
只需要将 该进制的每一位 分别乘上 该进制的位数次方(注意个位数为0次方)
举个栗子:
- 10010010.11B -> 1*27 + 1 * 24 + 1 * 21 + 1 * 2-1 + 1 * 2-2 = 146.75
- 251.5O -> 2 * 82 + 5 * 81 + 1 * 80 + 5 * 8-1 = 169.625
- AE86.1H -> 10 * 163 + 14 * 162 + 8 * 161 + 6 * 160 + 1 * 16-1 = 44678.0625
1.3 十进制 转换 其他进制
通过短除法可以实现,短除内容为该进制数
还是举个栗子:将 98D 转换成 二进制
2|47 0 2|23 1 2|11 1 2|5 1 2|2 1 2|1 0 0 1
自下向上的顺序得到的结果就是 1011110B
1.4 二进制 转换 八进制、十六进制
由数学的角度可以知道 23 = 8,24 = 16
因此转换的时候可以通过多个数据捆绑得到进制的转换
还是举个栗子:1011010B
转换为八进制 1 011 010 转换为十六进制 101 1010
可以看到八进制是三个二进制位,十六进制是四个二进制位。
那么以上的内容就可以转化成(不满的话要往前补,遇到小数在后开始补齐):132O 和 5AH
1.5 八进制、十六进制 转换 二进制
同上的思路,不过是逆向思维
可以通过132O来看,1和3和2,分别去拆成三位数的二进制位,然后结合在一起即可~
1.6 其他任意进制相互转换技巧~
对于一些特殊的转换比如八进制转十六进制之类的,可以通过中间项的进制转换作为跳板
例如说八进制和十六进制的互换,可以通过先转换二进制,然后再进行转换
2.0 数据的表示(二进制)
2.1 原码
原码是由符号位和数值位组成的。其中符号位0正1负。
tips:当机器字长为n+1时,原码可表示的范围为 -(2n – 1) <= x <= 2n – 1
2.2 反码
看原码的情况:
- 符号位为0 -> 反码不做改变
- 符号位为1 -> 符号位不变,数值位取反
tips:当机器字长为n+1时,反码可表示的范围为 -(2n – 1) <= x <= 2n – 1
2.3 补码
看反码的情况:
- 符号位为0 -> 补码不做改变
- 符号位为1 -> 反码末位+1
tips:当机器字长为n+1时,补码可表示的范围为 -2n <= x <= 2n – 1
2.4 移码
在补码的基础上将符号位取反(注意:移码只能用于表示整数)
tips:当机器字长为n+1时,补码可表示的范围为 -2n <= x <= 2n – 1
小彩蛋~
民间的一句传言“补码的补码是原码”其实是真的喵!
3.0 校验码(海明码)
由于奇偶校验和循环冗余校验码不是重点内容,此处不做展开,此处只展示海明码
海明码构成方法:在数据位之间插入 k 个校验码,通过扩大码距来实现检错和纠错
设数据位是 n 位,校验位是 k 位,那么 n 和 k 需要满足:2k – 1 >= n + k
2017上半年上午试题5 已知数据信息为16位,最少应附加____位校验位,才能实现海明码纠错? A.3 B.4 C.5 D.6
可以看出 n = 16,设校验位为 k,可以轻松列出 2k – 1 >= 16 + k,计算得出结果是 5