在时钟里,时针的最大刻度是 12,超过这个值(称为模)将重新计时。假设现在要把时针从 4 点钟调到 1 点钟,可以逆时针减 3 小时,也可以顺时针加 9 小时,效果是完全一样的。
于是在时针系统里存在:4-3 = 4+9,在模为 12 的时针系统里 3 和 9 就是一对补数,利用补数形式可将式子写成:4-3 = 4+(12-3)。
这里的12点也可以称为0点,即高位溢出
因为换句话说如果A加上B等于模或者0,那么B就是A的补数
举个例子:
2的二进制是0000 0010
0的二进制是0000 0000
我们知道二进制加法中,正常情况下2加上任何数都不能等于0,只有一种情况,那就是高位溢出。比如2加上某个数变成了1 0000 0000,这个时候计算机会弃掉高位的1.
这就很简单了,把2按位取反,变成1111 1101,它加上2就是1111 1111(全1),这个时候只需要再加1就能溢出,变成1 0000 0000.
所以将2按位取反再加1为 1111 1110,就是2的补码。
所以计算64-16
-》
64的原码 + 16的补码
-》
64的原码: 0100 0000
16的原码: 0001 0000 取反 1110 1111 加1 等于 1111 0000
-》
0100 0000
1111 0000
----------------
1 0011 0000
-》
48