===》點我返回目錄《===
我們繼續深究下去,打破砂鍋問到底。
上述介紹的補碼系統粗看起來這是比較奇怪的表示,實際上不然,瞭解了幾種運算後,就會明白補碼錶示是多麼簡便。
我們來看兩個數的加減運算。a+b或者a-b。如果用我們平時數學上的表示,我們需要分別判斷a和b的符號,加上運算符,就有8種組合:+++,++-,-++,-+-,--+,---,+-+,+--。我們的內部電路的運算需要判斷八種情況,會比較複雜。
如果用補碼,因爲補碼自身已經處理了正負數,所以只需要判斷運算符是+還是-,如果是+就把a和b直接相加,如果是-,就先對b再次求補碼,然後加a。
舉例如下:
計算17+22=39,用八位二進制表示爲00010001+00010110,結果爲00100111。正確。
計算22-17=5,22的二進制表示爲00010110,17的二進制表示爲00010001。判斷運算符爲-,所以把17求補碼,爲11101111。然後加00010110,結果爲100000101,現在最高位出現了一個進位1,扔掉,保留8位,最終結果爲00000101,正確。
計算22-(-17),22的二進制表示爲00010110,-17的二進制表示爲11101111。判斷運算符爲-,所以把-17求補碼,爲00010001。然後加00010110,結果爲00100111。正確。
從上面的例子可以看出,用了補碼之後,無論正負數,都可以統一處理了,並且化減法爲加法。
沒錯,所有的運算最後統一到加法了。你領略到補碼的簡便了吧。
我們自己試着做一個加法器。
先看加法運算表:
0 1
0 0 1
1 1 10
因爲是二進制,所以加法表很簡單。
這個加法表裏有一個不同之處,就是1+1=10,結果有兩位,前一位是進位,後面的是值。我們需要分開處理,考慮進位,得到新的加法表:
0 1
0 00 01
1 01 10
再把上表分開表示成加法表和進位表:
加法表
0 1
0 0 1
1 1 0
進位表
0 1
0 0 0
1 0 1
我們仔細看上表。加法表跟我們以前提到過的邏輯異或XOR操作是同一張表,進位表跟邏輯與AND操作是同一張表。這樣我們可以用邏輯門電路實現加法,用一個異或XOR門和一個與AND門。二進制下,0/1,既是數又是狀態,所以邏輯運算和算術運算在電路這一層統一了。
用門電路,這個加法運算這麼搭建:
簡化圖爲:
但是這個加法器弱爆了,只能算一個bit的加法,還不會考慮進位,我們把它叫半加器。
那我們就接着看看多個bit位的加法器怎麼做,有了半加器,這個任務不困難,把A+B的和與前一步的進位再用半加器加一次,再把兩個半加器的進位或門輸出成本加法器的進位就可以了。即通過兩個半加器加上一個或門組合成一個全加器。
簡化圖:
接下來,我們把這個加法器組合成8位的加法器。
相加的數據位A,B,從0到7每一位分別輸入,前一位的進位輸入到下一位。這樣串連起來。
簡化圖爲:
現在看是不是長得有點像一個芯片的樣子了?很有科技感。
不過我們現在同時也看到了,實現一個簡單的運算就需要好多電子元器件組合起來,非常複雜,閉眼就可以想到真正的計算機有多複雜。好在通過工程的方式,這些器件可以一點點組成更大的器件,越組裝越大,最後我們花幾十美元就可以直接買到一個叫CPU的組件了。
0和1單獨拿出來做不了什麼事情,這些基本門電路單個也沒有什麼功能,但是組合在一起可以達到神奇的結果。上個世紀五六十年代仙童公司Robert Noyce與德州儀器公司Kilby發明了集成電路,它通過半導體工藝把所需的晶體管、電阻、電容等元件及它們之間的連接導線全部集成在一小塊硅片上。
現在在一個指甲蓋大小的硅片上能放上億個元器件,比如Intel Pentium的i7大概集成了14億個晶體管。工藝是按照Moore定律發展的,當價格不變時,集成電路上可容納的元器件的數目,約每隔18-24個月便會增加一倍,性能也將提升一倍。這是一種指數級的增長,總有一天會將人類帶到臨界點。
現在你只需要花幾塊錢就可以買一個芯片,不要忘記這是費了多少人多少年努力的結果。指甲殼大小的一塊芯片,匯聚了人類千年萬年的智慧。
當一個CPU的成本降到一張紙的成本的時候,奇點就會來臨,人類歷史必將進入下一個階段。
想想很奇妙,一個簡單的整數,一個簡單的加法,通過疊層累加,最後構成了龐大的算術體系。爲什麼科學家會不停地探索大統一理論?就是基於這個信念:這個世界能用一個統一的理論解釋全部的現象。