处理器到底是怎么计算加法的
上一篇文章中有很多没解释清楚的地方和错误,我们再来解释一遍。
整数怎么转换成二进制?
和上次一样,我们在二进制数字的前面加上B
其实这个问题可以用一个很简单的方法。
我们以五十为例。
这个方法很类似于短除法,每一次都除二,将余数写在右边,然后从下往上面读。
我们来验证一下。
看一看对应的十进制。
确实是五十。
怎么样,你学会了吗?
还是原来那一张表格。
输入进位可以这样理解:
为了容易看,我们将进位放在上面箭头的地方。
分开它。
对于十位上来说,进位的小“1”就是输入进位。而对于个位来说,进位的小“1”就是输出进位。
你也可以这样理解,将这个表格想象成一位。
这样就形象了许多吧?
继续填充表格。
进位在上一位表示一个十,但进位之后就只表示一个一了。
这个应该明白吧?
对于个位来说,进位的小“1”是一个十,而对于十位来说,它只代表一个一。
我们将它简化一下。
这就很像一个竖式了。
由于我们一般从最低位开始做,所以我们也这样。
最低位的One-Bit-Adder将输出进位给到十位的One-Bit-Adder上。一步步计算,最终得出结果。
最终的进位还要放到最前面。
这道题有两个进位。
一个是个位上向十位的进位,另一个是十位上的进位。
由于十位上的进位没有地方放了,所以放到了结果的最前面。
我们将竖式补全,也就是多放几个。
把它们连起来,因为它们不会自己向别人进位。
最低位的One-Bit-Adder从加数中取出最低位来运算,然后把结果放到结果的第一位,把进位给到个位上的One-Bit-Adder。
把线画完整。
很乱,对不对?
幸运的是,我们不需要分析这张图片了。
我们还是准备将它做出来。
从A的视角开始。
还是先抛弃一些。
假设A为一。
异或的意思是不相等,你可以在上一篇文章中了解它们。
如果A和B不相等,就证明它们相加的结果是一。
但是还不能停。因为还有C-In输入进位要相加。
如果C-In的值也是一,那么A就不能通过这扇门,结果就为0。
把原图放回来。
A如果和B相等的话,B1+B1 = B10,进位是一。但如果C-In和A又相等的话,B1+B1 = B10,进位还是一。所以只有A和B不相等,也就是A通过了第一扇异或门,就证明留下的等于0。
怎么样,这下明白了吗?