計算機內部探秘 統一到加法

2021-10-06 19:44:44 字數 2577 閱讀 7714

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

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

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

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

C 獲取計算機內部資訊

computerinfohelper.cs 計算機資訊助手類 public class computerinfohelper catch exception e managementbaseobjectpropertyname.cs namespace wen.helpers.common.comp...

C 獲取計算機內部資訊

computerinfohelper.cs 計算機資訊助手類 public class computerinfohelper catch exception e managementbaseobjectpropertyname.cs namespace wen.helpers.common.comp...

計算機內部工作之 鏈結

鏈結是將各種 和資料片段收集並組合成為乙個單一檔案的過程,這個檔案可以被載入 複製 到記憶體並執行。鏈結可以執行於編譯時,也就是在源 被翻譯成機器 時 也可以執行於載入時,也就是在程式被載入器載入到記憶體並執行 甚至執行於執行時,也就是應用程式來執行。首先 我們要了解目標檔案 目標檔案有三種形式 我...