- 2 负数的转换关系(原码 --> 补码)
原码 --> 取反 --> 反码 --> +1 --> 补码
举个例子(十进制-3):
原码:1000 0011 》》 反码:1111 1100 》》 补码:1111 1101
- 负数的转换关系(补码 --> 原码) A模式
补码 --> -1 --> ?码 --> 取反 --> 原码
举个例子(十进制-1):
补码:1111 1111 》》 ?码:1111 1110 》》 原码:1000 0001
- 负数的转换关系(补码 --> 原码) B模式
补码 --> 取反 --> 反码 --> +1 --> 原码
举个例子(十进制-1):
补码:1111 1111 》》 反码:1000 0000 》》 原码:1000 0001
通过 B模式(它与原码转到补码的操作是一样操作) 说明:即补码的补码等于原码
在规定中,8位二进制码能表示的反码范围是-127~127。
此时(字长为8位), -128没有原码和反码(只有补码)。
补码运算原理:
假设在4位系统里(8位,16位,32位同样的理解思路,这里取简便位数系统作说明)
在计算机里,如果我们要计算5-3的值,我们既可以用5减去3,也可以用5加上13。这是为什么呢?
假设一面钟:0~15共16个时针点圆钟,顺时针方向设为正,铺开形如:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10/A | 11/B | 12/C | 13/D | 14/E | 15/F |
这面圆钟,以逆时针方向设为负,相同的时针点位置,铺开形如:
0 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
统一各时钟点位置以顺时针和逆时针的表示法:
顺时针值 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
逆时针值 | 0 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
这就像我们的钟表,它从1点走到12点之后,又回到了1点。
我们的计算机也是,从0走到15之后,再往下走就又回到了0,就像我们转了一个圈一样。
我们从5这个位置往回退(逆时针)3个格,就完成了5-3这个计算。
我们也可以从5这个位置往前走(顺时针)13个格,然后就到了2。
这样,我们往前走了13个格之后,也到了2这个位置。
所以,在我们这个计算机中,减3和加13是一样的。而3+13=16,我们就说在4位(模16)系统下,3和13是互补的。
我们计算5-3就可以换成,0101-0011就可以表示为0101+(-0011)。
我们在计算机中都是把负数(注意在4位系统里,0111为最大正数),-3二进制表示是-0011,即为1011,那么-3的补码也就可以这么计算得到:10000-1011 = 1101
知识点:补码。
我们总说补码是“按位取反再加一”,看了上面这个式子相信大家就会明白了,
其实就是把10000-0011换成了1111-0011再加1的形式。然后,0101-0011就换成了0101+1101,它们计算出来的结果为10010。由于我们的计算机只有四个bit,所以结果为0010。即,在模16的计算机中,5-3=5+13=2。