閱讀本文需提前學(xué)習(xí)《編碼---隱匿在計算機(jī)軟硬件背后的語言》前十一章
關(guān)于本書中各種邏輯門的知識匯總?cè)鐖D:

加法計算是計算機(jī)唯一要做的工作,通過加法我們可以實(shí)現(xiàn)減法、乘法和除法。
二進(jìn)制的加法可以表示如下:
0+0的進(jìn)位是0,加法位0
0+1的進(jìn)位是0,加法位1
1+1的進(jìn)位是1,加法位0
我們想用電路來表示加法,顯而易見地可以用邏輯門來表示。
不難發(fā)現(xiàn),二進(jìn)制加法的進(jìn)位操作和與門的結(jié)果一致,因此可以用與門來表示。但加法位相對來說有點(diǎn)復(fù)雜,二進(jìn)制的加法位如下表:
+加法 | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 0 |
我們想要的結(jié)果是0、1、1、0(從左到右,從上到下)
經(jīng)過對比后可以發(fā)現(xiàn),常用的幾個邏輯門中并沒有和上表結(jié)果一樣的,但是有兩個邏輯門與上表結(jié)果十分相似。它們是或門和與非門,其中或門和上表結(jié)果相似,除了右下角的結(jié)果。而與非門則是左上角不一樣。
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四個點(diǎn)代表輸入,將上述兩表中同位置的輸出做“與”運(yùn)算,發(fā)現(xiàn)得到的結(jié)果就是0、1、1、0。那么將一個或門和一個與非門連接到相同的輸入上再連接一個與門就可以完成加法位的運(yùn)算。上述的門就叫異或門,其功能就是當(dāng)輸入相同時輸出0,輸入不同時輸出1。異或門如下圖所示:

可以簡寫為:

我們將一個與門和一個異或門連在一起就可以完成我們的進(jìn)位和加法位的運(yùn)算,如下圖所示:

我們再來看另外一個問題,二進(jìn)制加法11+11,最右位兩個1加完后有一個進(jìn)位1,所以在中間位上其實(shí)是3個1相加。而上圖因為只有兩個輸入所以沒有將前一位的進(jìn)位納入這一次的運(yùn)算,所以它又叫半加器。意思就是它沒有辦法進(jìn)行1+1+1的運(yùn)算,簡寫如下圖:

為了對三個二進(jìn)制數(shù)進(jìn)行加法運(yùn)算,我們可以做下圖的連接:

想下11+11運(yùn)算,當(dāng)最右邊兩個1相加后,產(chǎn)生1個進(jìn)位“1”,兩個11左邊的“1”相加后再與進(jìn)位“1”相加,體現(xiàn)在圖中就是最左側(cè)的“進(jìn)位輸入”+“輸入A”+“輸入B”,最左邊位兩個1相加(輸入A+輸入B)的結(jié)果與進(jìn)位輸入“1”再次通過一個半加器相加,其“和”單獨(dú)作為加和輸出,而進(jìn)位再與最左邊的“1+1”的進(jìn)位做“與”運(yùn)算產(chǎn)生進(jìn)位輸出。就可以完成一個有進(jìn)位的二進(jìn)制運(yùn)算(即三個二進(jìn)制數(shù)相加)。這個“門”我們成為“全加器”。可以簡寫如下:

現(xiàn)在我們可以組建一個如下圖的加法器:

首先將最右端的兩個開關(guān)和下面的一個燈泡連接到一個全加器上。因為最右端肯定是沒有進(jìn)位的,所以可以將最右端的進(jìn)位輸入接地,如下圖:

對于加法器左邊第二列的進(jìn)位輸入就是第一列的進(jìn)位輸出,依次接8個全加器即可完成一個8位的二進(jìn)制加法器。這里需要注意的是最后一個全加器應(yīng)該接兩個燈泡,其中一個是加和,另個是進(jìn)位,如下圖所示:

最后一個進(jìn)位輸出被連接到第9個燈泡上。
至此,一個二進(jìn)制加法器完成。