显然,反码的反码是原码,那么补码的补码是什么呢?还是原码。比如对于原码1111-1101的补码0000-0011求补码运算:
1111 1111 - 0000 0011 ------------- 1111 1100 + 0000 0001 ------------- 1111 1101
二进制数的反码和补码在逻辑电路中实现起来非常简单,对于8位二进制数的反码运算,只需要用到一个8位反相器(inverter)。
对于被减数176减去减数253,我们有下面对应的8位二进制数的运算:
1011 0000 - 1111 1101 ----------- ???? ????
首先,求减数1111-1101的1的补数:
1111 1111 - 1111 1101 ----------- 0000 0010
对1的补数和被减数做加法运算:
0000 0010 + 1011 0000 ----------- 1011 0010
然后对二进制数1011-0010求1的补数:
1111 1111 - 1011 0010 ----------- 0100 1101
结果是0100-1101,也就是十进制数的77,再取反,即数字-77。
到此,我们讲完了二进制数字不用借位的减法运算。接下来我们探讨一下二进制数字的有符号数的表示。
我们知道8位二进制数字的范围是0到255。这256个数字也可以如下表示:
1000-0000, 1000-0001, 1000-0010 ... 1111-1111, 0000-0000, 0000-0001 ... 0111-1110, 0111-1111
我们发现,除了数字1000-0000外,在数字0000-0000两侧对称的数字互为2的补数。我们可以用1开头的8位二进制数表示负数,以0开头的8位二进制数表示正数:
二进制数十进制数
也就是最高位表示符号位,1表示负数,0表示正数,8位有符号数的范围是-128到127。
我们看一个十进制数的被减数76减去减数53的二进制运算:
76 - 53 ---- ??
等价于
0100 1100 - 0011 0101 ----------- ???? ????
首先,计算减数53也就是