对于计算机而言,每一个数字都是有位数限制的,如果两个数的加和超出了位数的限制,前面的最高位将会被舍弃
假设现在有两个数15, -7
用二进制表示则分别为1111与0111,补码则分别为1111与1001
可以注意到0111与1001相加的和为10000,假设现在的计算机有效位只有4位,那么10000的最高位将会被舍弃,我们看到的只有0000这个数据
这样的话,如果一个正数和一个负数相加的和可以向上述一样溢出,那么负数导致的增量就会消失,最后只剩下正数带来的增量
以15和-7为例
补码运算 -> 1111
+1001
=1(0)1000
括号内为符号位,0代表正数,1代表负数
上面相加的结果其实为101000,但是由于计算机只能保存四位(另外加一个符号位)的结果,因此才可以得到正数1000,也就是十进制的8
至此可见,利用补码可以让减法变成加法,核心在于模运算或者说是移位运算导致