“你认为Beatles为什么要歌唱‘当我64岁的时候’?”

进位计数制

十进制、十六进制、二进制互转应该已经烂熟于心了。

什么是编码、什么又是译码?

特定的二进制数码称为代码。

以一定的规则编制代码,用以表示十进制数值、字母、符号等的过程称为编码。

将代码还原成所表示的十进制数、字母、符号等的过程称为解码或译码。

小数点的转换方法

对于十进制小数,如何转换成二进制小数?

将小数位乘以2,若大于1,则记为1,将其减去1;若小于1,则记为0。之后重复该循环就行。当然,不是所有小数都可以表示成有限位的二进制小数。

那对于三进制小数呢?比如(121.2)3使用二进制如何表示?

计算过程 二、八、十、十六之间的转换

负数的表示

负数也是很头疼的话题。反码、补码……学《大学计算机》的时候就被折磨过了。

补码 Complement Number System

十进制补码就是10's complement,二进制补码就是two's complement。这里着重讨论二进制补码。

对于二进制补码,最高有效位(MSB)为符号位。此时,MSB的权为-2n-1,可表示数的范围为(2n1),+(2n11)-(2^{n-1}),+(2^{n-1}-1)

二进制补码的例子

要记住,二进制补码仅有一种0的表示方法。为什么?因为符号位溢出了。

0与-127

反码

还有一种表示方法叫做“基数减一补码”,即二进制反码one's complement,与上面区分。

在反码中,0有两种表示方法。

二进制反码的例子,注意0的两种表示方法。

溢出

对于加法,如果加数的符号相同,而和的符号与加数的符号不同,则出现了溢出。

对于减法,如果被减数和取补后减数的符号相同,而差的符号与上面不同,则出现了溢出。

格雷码

格雷码的相邻两个数字表示出来仅有一位不同,这可以减少出错的可能性。

如何从普通二进制数生成格雷码?只需要将普通二进制数前面补上0,然后相邻两位做异或就行。

举个例子。对于1110即十进制的14,如何生成格雷码?

1
2
(0) 1 1 1 0
1 0 0 1

从格雷码生成普通二进制数,就是刚刚的操作进行逆运算。

纠错码

为了确保传输的数据无误,我们采用信息位+校验位的方式来进行数据传输,这就是纠错码。对于一位的错误检测,我们可以采用奇校验码或者偶校验码,将最后一位(LSB)作为校验位。

最小距离

如果所有可能的编码字对之间的最小距离为2,则可以检测全部单个差错。

汉明码

汉明码每一位从1到2i-1进行计数。在任何情况下,位置是2的幂的那些位都是校验位,其余位为信息位。

汉明码的纠错方法 汉明码纠错实例