计算机中如何实现减法?补数的概念
计算机是如何做减法的
对于加法来说,计算机很容易实现,加法是始终从两个加数的最右列向最左列进行计算的,每一列的的进位加到下一列中。而在减法中没有进位,只有借位,它与加法存在本质的区别。
例如,我们可以先看一道例题:
要解决这个问题,我们首先从最右列入手,可以看见,6是大于3的,所以要从5上借1,再用13减去6得到7。由于5已经被借走1,所以实际上是4了,继续向2借1,得到7,以此类推,我们可以得到结果为77。
我们可以通过一些小技巧来让减法不涉及借位。为了避免借位,我们首先要从999中减去减数,而不是从原本的被减数中减去减数。
由于操作数是三位数,所以我们这里使用了999。从一串9中减去一个数叫做对9求补数,176对9的补数是823.计算出补数后,将补数与原来的被减数相加就可以得到1076,最后再将结果加上1,并减去1000。这样我们就得到了结果77,而且没有使用到借位。原理是这样的:
等价于
又等价于
然后将数字重新组合
那么我们将这种方法应用于二进制,就变为了:
第一步,我们用11111111(255)减去减数:
第二步,将补数与减数相加:
第三步,将结果加1,再减去100000000就得到1001101,就等于十进制数的77。
其实我们可以发现,上述的补数,就是把减数按位把0换成1,把1换成0。然后把补数和减数相加得到的结果再减去100000000,实际上在电脑中没有进行这一步,它是直接把最高位舍弃了。就好比一个24小时的时钟,现在是23点,再加上三个小时就是26,但是时钟最高位只有24,接着就是1点了,所以当超过24过后就溢出,得到了2点。在计算机中如此。当只有8位的时候,最后补数与减数相加得到了9位,就溢出最高位,就得到了正确结果。