原码:十进制数的带符号的二进制形式,例如-5的原码是1000 0101
。
以计算 (+3) + (-5)
为例,如果直接将两个数的原码相加,有两个问题:
- 符号位相加没有意义,因为一个正数和一个负数的符号位相加始终为负数的符号位,与这两个数相加的实际结果的正负没有关系
- 非符号位的相加实际上相当于两个数的绝对值相加,这不符合预期
反码:正数的反码等于原码,负数的反码等于除符号位之外的所有位取反,故而
看起来没啥问题,然而我们再计算:
负数补码等于反码加1,解决+0和-0的问题。
下面两个加法:
这里注意,两个数和为0,意味着和的补码为0000 0000
,同时意味着不会有任何两个数的和的补码能够为1000 0000
,而如果按照通常的思路理解有符号整数,0000 0000
和1000 0000
都应该表示十进制整数0。我们只用0000 0000
表示0,而1000 0000
用来表示另一个特别的数字-128,并且该数字的原反补码也都相同,均为1000 0000
,这样
评论区