計算機怎么實現加法?今天學習了一下,主要是根據電子電路的特性制定一套規則來模仿人類的加法並最終實現。
既然是實現人類的十進制加法,就得先回顧下我們自己的加法法則。
先看看十進制加法 :
122
+ 78
= 200
對於十進制運算我們知道,進行加法時,低位滿10要向高位進位,二進制改成滿2進位即可,都是一樣的,只是又基數10變成了基數2.
比如二進制加法:
1111010 (122)
+ 1001110 (78)
= 11001000 (200)
按十進制的加法規則轉成滿二進位的規則,同樣實現了二進制加法,不過這是實現二進制加法的理論部分,理論的輸出輸入,總得有個對應的物理操作才能實現吧,比如你用算盤計算12+3,總得把算盤的算珠用手撥動一下吧,用紙計算一個加法,也得在紙上寫一下12+3吧,到最后把計算結果一統計,就知道剛剛的加法結果了,有人說我們直接就能心算出12+3了,不用紙和筆啊,那是因為我們對於簡單的數已經熟練到形成條件反射了,如果計算一個很大的數我們未必能直接心算出來,那就得借用存儲臨時數據的媒介(比如紙幣和算盤),同樣的道理,計算機計算加法也是需要一個物理動作,也需要存儲媒介和實現加法的物理動作,但是微觀物理電路有個特點,他沒長腦袋,他不知道什么是數字0和1,對他而言,他只有高壓和低壓,通電和斷開這些物理狀態,而這些狀態,恰恰被聰明的人類發現,被人為的利用代表成了數字0和1,比如+5v電壓代表數字1,0v代表數字0,這樣物理電路的高低壓就能幫我們儲存數據了,這樣加法的一個要素,存儲媒介已經完成,下面就是要利用物理電路來實現加法的物理動作,這個時候我們要繼續人為的制定規則來拼湊出我們要的結果,
我們既然可以根據我們人類的思維方式來定義一個加法法則來運算,當然也可以給物理電路的屬性定義一套運算規則,幫我們也完成運算,例如我們規定這樣一個規則: 0 和 0 = 0 ,0 和 1 = 1, 1 和 0 = 1, 1 和 1 =0 。注意這個規則不再是我們說的加減乘除法規則了,這是一套新的規則,我們要跳出來,有了這套規則,我們就知道了,兩個相同的狀態會生成一個0的狀態,兩個不同的狀態會生成一個1的狀態,姑且管這個運算法則叫異或運算吧,這個異或運算對應的物理操作就是電壓狀態的轉變規則 。
如果我們依舊把計算機世界的各個部分組成的世界比喻成計算機星人世界,那么這里一對比就是地球人有加法,計算機星人也有加法,只是這個加法他們不叫加法叫異或運算,
並且他們的異或運算和我們的加法有點不一樣,但是目的都是為了實現加法流程。
掌握了這個異或運算規則,那么就可以進行二進制加法了吧,來看看以下例子:
1 1 1 1 0 1 0 轉成10進制-> 122
異或操作 1 0 0 1 1 1 0 轉成10進制-> 78
不考慮進位的異或操作結果 0 1 1 0 1 0 0 轉成10進制-> 52 和 理論結果 200相差很遠啊
為什么用異或運算,算出來的結果不是我們想要的結果,難道計算機星人的異或運算規則有問題?其實這個異或運算只完成了加法的一部分而已,因為我們忘了進位了,小時候我們在做加法運算時,有的同學喜歡先把進的位寫在一邊,先把個位數直接加完,最后在把進的位補加上去.
比如計算 22
+ 19
先不考慮進位 31 , -> 這個是半成品,只完成了加法的一部分。
把進的位記上 10
再補加上 41 -> 算上進位才是完整的加法。
同樣的道理,剛剛的異或運算也沒有考慮進位,所以沒有完全做完,把進的位先記在一邊,然后再次進行異或運算,(可能會有多次異或運算)最終得到正確結果 11001000。
實際電子電路實現加法的過程中用到的物理單位有半加器和全加器,半加器就是不考慮進位來實現異或運算的電子原器件,這種加法只能做一部分加法,所以叫半加器,全加器就是考慮了進位,能實現完整的加法,有了這些物理單位,給他們輸入要算的數,就能讓他們完成我們要的加法了。