計算機內部探祕:統一到加法

===》點我返回目錄《===

我們繼續深究下去,打破砂鍋問到底。

上述介紹的補碼系統粗看起來這是比較奇怪的表示,實際上不然,瞭解了幾種運算後,就會明白補碼錶示是多麼簡便。

我們來看兩個數的加減運算。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的成本降到一張紙的成本的時候,奇點就會來臨,人類歷史必將進入下一個階段。

想想很奇妙,一個簡單的整數,一個簡單的加法,通過疊層累加,最後構成了龐大的算術體系。爲什麼科學家會不停地探索大統一理論?就是基於這個信念:這個世界能用一個統一的理論解釋全部的現象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章