最近看了一本書《編碼》,如何從頭開始構建一臺計算機。從最基礎的莫爾斯編碼到二進位,基礎電路和布爾邏輯運算的神奇結合。產生了目前人類最偉大的發明-計算機。
二進位(binary)二進位的提出者是德國數學家萊布尼茨,他和牛頓發現了高等數學中的微積分。用二進位記數只需要用到0和1兩個符號,逢二進一。我們一般習慣了十進位,用0-9十個符號來表示數,逢十進一。二進位和十進位記數原理相同,僅僅是符號用的少。
下面是二進位和十進位0-10的對照表。
十進位二進位001121031141005101611071118100091001101010布爾運算(邏輯運算)所有男人都必有一死;蘇格拉底是男人;因此,蘇格拉底會死。
類似代數,布爾運算符號為:and、or、not。在計算機中的邏輯運算中也叫與、或、非。算子不是一般的數字,而是集合。
邏輯運算且滿足一般代數運算的交換率、結合率和分配率。
二進位和布爾運算結合AND
OR
NOT
邏輯門三種最基本的門
and輸入輸入輸出或非門(NOR)
與非門(NAND)
NOR輸入輸入輸出摩根定律('+'為OR,'
加法器(二進位)只要造出了加法器,就可以通過加法得到減法、乘法和除法;再進行冪運算,解方程..
在數學運算裡,
注意到,我們的運算結果和上面的幾個邏輯門中的都不滿足,但是見證奇蹟的時刻到了。我們可以把計算的結果分為兩部分,一部分為加法結果,一部分為進位。然後再把進位結果進行二次相加,以此反覆,最終就可以得到結果。
只要我們的邏輯門足夠多,就可以計算任意大的數。這裡我採用的是8位的二進位數,兩個八位的進位數和最大為11111111+11111111=111111110,在十進位裡為510。也就是說可以計算510以內的任意加法(整數)。
當我們把一個或門、一個非門和與非門連接起來,得到異或門
通過異或門,可以得到加和輸出,進位輸出直接通過與門就可以得到。
為了看起來簡單一點,把異或門表示為如下
當我們把一個異或門和與門連接起來,就可以計算一位的二進位數。
s表示加和輸出,c表示進位輸出。為了查看方便,同樣簡畫為
這個東西之所以叫半加器,因為它將兩個二進位數相加,得出一個加法位和一個進位位。但是絕大多數二進位是多於一位的。半加器沒有做到的是將之前一次的加法可能產生的進位納入下一次運算。所以為了對三個二進位數進行加法運算,需要將兩個半加器和一個或門做連接。
這就是加法器本尊啦。一個加法器共需要18個繼電器,因為每個與門、或門和非門都需要兩個,因此一個異或門中就需要6個繼電器。一個半加器=一個異或門和一個與門組成,所以一個半加器需要8個繼電器。每個全加器由兩個半加器和一個或門組成。所以它需要18個繼電器。那麼,一個8位的二進位加法器就需要8個全加器,共需144個繼電器。
一個加法器的輸入輸出:
輸入A輸入B進位輸入加和輸出進位輸出0000001010100101100100110011011010111111把八個全加器連接起來,就得到了一個加器。
DONE這就是最基本的計算機運算邏輯了,後面還有減法器、乘除法。人與人之間的差距也太大了,究竟是什麼樣智商的一群人高出了計算機,只能膜拜獻出自己的膝蓋了。