二进制加法机的简单实现
在计算机中只有加法,可以说实现了加法,我们就可以实现减法、乘法、除法甚至更复杂的操作,但是这一切的前提是让机器实现二进制加法运算。二进制的加法其实最简单,但是计算机如何能够实现二进制的加法呢?
现在的计算机是晶体管计算机,其实实现加法的途径还是逻辑门电路,通过晶体管连接的逻辑门电路就可以实现二进制加法。
首先,先看看二进制加法是怎么算的。
0 1
+ 0 1
_______
1 0
即
+ | 0 | 1 |
0 | 0 | 1 |
1 | 1 | 10 |
把运算结果分成"和"与"进位"两部分
即
和 | 0 | 1 |
0 | 0 | 1 |
1 | 1 | 0 |
进位 | 0 | 1 |
0 | 0 | 0 |
1 | 0 | 1 |
不知道看出来它们和逻辑门的真值表有些相似,其实我们要做的就是把二进制加法和逻辑门联系起来,这样我们才能让计算机实现二进制加法运算
对于上面提到的运算结果中的"进位"部分,和"与门"的输出是完全一样的
AND 0 1
0 0 0
1 0 1
而对于"和"这部分来说,和"异或门"的输出时完全一样的。
异或门输出为1时,A输入为1或B输入为1,但不能同时为1
XOR | 0 | 1 |
0 | 0 | 1 |
1 | 1 | 0 |
异或门的简图如下
这样用逻辑门就可以实现加法运算了,如下图
只不过它只能实现一个位的二进制加法,由于多位运算存在进位问题,所以这只能算是半个加法器。
我们把这个"半加器"简化为下图
它可以把两个二进制位A 和B相加,从而得到一个和输出(简称S) 和一个进位输出(简称C O )。但大部分二进制数是多于1位的,半加器不能够把前一步的进位加到本次运算中。例如做如下加法:
1 1 1 1
+ 1 1 1 1
1 1 1 1 0
只能用半加器来计算最右边一列数:即1加1等于0,进位为1。对于右边第2列数,由于进位的存在,需要加3个数。接下来的几列都有这个问题,每一列二进制位的加法都包括了来自前一列的进位。
要把3个二进制数相加,需要按如下方式把两个半加器和一个或门连接起来:
它的工作原理是这样的。
对于第一个半加器是将这一位相加得到一个"和"输出和一个"进位"输出,由于要加上前一位的进位,所以此时引入第二个半加器,第二个半加器把这一位上的"和"输出和前一位的进位值相加,得到一个"和"输出和一个"进位输出",这个"进位输出"和第一个半加器的进位输出通过一个"或门"最后得到最终的"进位输出"。
这个组合就是"全加器",简化为下图
把多个全加器连接起来,就可以实现对位二进制的加法运算。
连接方法:每个全加器的进位输出连接下一个全加器的进位输入。
如图,八个全加器相连
上图的可以简化成下图的8位的加法器
有了8位加法器,也就可以画出16位,或者更多位的加法器,只要有足够多的逻辑门,换句话说就是有足够多的晶体管。
16位加法器的连接,只需两个8位加法器
其它的一次类推。