为什么负数在计算机中要用补码表示

来自姬鸿昌的知识库
Jihongchang讨论 | 贡献2022年9月3日 (六) 10:31的版本
跳到导航 跳到搜索

因为取补码可以简化二进制加减法运算。

假如我们不使用补码,以4个字节的 int 为例,第1位是符号位,0代表正数,1代码负数

+1是: 0000 0000 0000 0000 0000 0000 0000 0001
-1就是: 1000 0000 0000 0000 0000 0000 0000 0001
+2是: 0000 0000 0000 0000 0000 0000 0000 0010
-2就是: 1000 0000 0000 0000 0000 0000 0000 0010

-2+1应该等于-1,这个时候我们发现:

1000 0000 0000 0000 0000 0000 0000 0010 (-2)
+ 0000 0000 0000 0000 0000 0000 0000 0001 (+1)
= 1000 0000 0000 0000 0000 0000 0000 0011 (-3)

这并不符合我们的期待。


相反,如果我们应用补码:

+1是: 0000 0000 0000 0000 0000 0000 0000 0001
-1就是: 1111 1111 1111 1111 1111 1111 1111 1111