阅读本文需提前学习《编码---隐匿在计算机软硬件背后的语言》前十一章
关于本书中各种逻辑门的知识汇总如图:
加法计算是计算机唯一要做的工作,通过加法我们可以实现减法、乘法和除法。
二进制的加法可以表示如下:
0+0的进位是0,加法位0
0+1的进位是0,加法位1
1+1的进位是1,加法位0
我们想用电路来表示加法,显而易见地可以用逻辑门来表示。
不难发现,二进制加法的进位操作和与门的结果一致,因此可以用与门来表示。但加法位相对来说有点复杂,二进制的加法位如下表:
+加法 | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 0 |
我们想要的结果是0、1、1、0(从左到右,从上到下)
经过对比后可以发现,常用的几个逻辑门中并没有和上表结果一样的,但是有两个逻辑门与上表结果十分相似。它们是或门和与非门,其中或门和上表结果相似,除了右下角的结果。而与非门则是左上角不一样。
OR | 0(a) | 1(b) |
---|---|---|
0(c) | 0 | 1 |
1(d) | 1 | 1 |
NAND | 0(a) | 1(b) |
---|---|---|
0(c) | 1 | 1 |
1(d) | 1 | 0 |
表中a、b、c、d四个点代表输入,将上述两表中同位置的输出做“与”运算,发现得到的结果就是0、1、1、0。那么将一个或门和一个与非门连接到相同的输入上再连接一个与门就可以完成加法位的运算。上述的门就叫异或门,其功能就是当输入相同时输出0,输入不同时输出1。异或门如下图所示:
可以简写为:
我们将一个与门和一个异或门连在一起就可以完成我们的进位和加法位的运算,如下图所示:
我们再来看另外一个问题,二进制加法11+11,最右位两个1加完后有一个进位1,所以在中间位上其实是3个1相加。而上图因为只有两个输入所以没有将前一位的进位纳入这一次的运算,所以它又叫半加器。意思就是它没有办法进行1+1+1的运算,简写如下图:
为了对三个二进制数进行加法运算,我们可以做下图的连接:
想下11+11运算,当最右边两个1相加后,产生1个进位“1”,两个11左边的“1”相加后再与进位“1”相加,体现在图中就是最左侧的“进位输入”+“输入A”+“输入B”,最左边位两个1相加(输入A+输入B)的结果与进位输入“1”再次通过一个半加器相加,其“和”单独作为加和输出,而进位再与最左边的“1+1”的进位做“与”运算产生进位输出。就可以完成一个有进位的二进制运算(即三个二进制数相加)。这个“门”我们成为“全加器”。可以简写如下:
现在我们可以组建一个如下图的加法器:
首先将最右端的两个开关和下面的一个灯泡连接到一个全加器上。因为最右端肯定是没有进位的,所以可以将最右端的进位输入接地,如下图:
对于加法器左边第二列的进位输入就是第一列的进位输出,依次接8个全加器即可完成一个8位的二进制加法器。这里需要注意的是最后一个全加器应该接两个灯泡,其中一个是加和,另个是进位,如下图所示:
最后一个进位输出被连接到第9个灯泡上。
至此,一个二进制加法器完成。
参加资料:编码:隐匿在计算机软硬件背后的语言