規則是怎麼來的?


有一本書回答這個問題最合適:編碼的奧祕。

最開始人們也研製過十進位計算機,但是隨著晶體管技術的出現以及其後半導體技術的不斷發展,人們發現用二進位編碼反而更為方便。因為對於構成計算機基礎的電路邏輯單元而言,用通/斷(高/低電平)來表示0/1十分自然。如果用其他進位那麼底層硬體也需要其他更多狀態,顯然當時條件下沒有通/斷這兩個狀態那麼好區分,那麼可靠。只要位數多一些,二進位數字同樣可以實現精確表達。底層硬體是問題關鍵,現在火熱的量子計算機就未必是二進位。根據量子物理,它具有可區分的很多狀態。


其實高級編程語言並沒有限制進位問題,怎麼方便怎麼來。但高級語言的代碼在執行前必須要轉化成一長串的「0」「1」代碼機器才能識別。因為現代計算機是也是數字電路的一種,數字電路通常二進位設計的。在數字電路里,高電平和低電平可以分別表示「0」和「1」、有或空,這樣的電路實現起來最簡單容易實現。在數字電路的發展歷史中,別的進位的電路也存在過,但實現起來太複雜都被淘汰了。二進位雖然轉換成本高,但最容易實現的。


這個觀點是不成立的,之所以用二進位,是因為電路實現簡單。實際上,前蘇聯還研製過三進位計算機:

三進位計算機_百度百科?

baike.baidu.com圖標


底層邏輯電路好實現、經濟效益高


首先任何一個符號,比如漢字、英文、機器指令、顏色,都可以用一個整數來表示。

這個需要事先約定好一張符號表,之後就可以用符號表中第N個元素來表示對應一個符號了。

所以機器語言看起來是一串整數(二進位數字),但它其實是一堆符號串,用人話寫出來就是彙編代碼。比如21678這個數字真正的含義可能是:add ax, bx,也就是計算ax和bx的和。這裡的指令是瞎寫的,不是計算機真正使用的指令,但是差不多是一個意思。

這裡其實更關鍵的問題是,我如何讓機器把21678這個數字理解成一個加法,並且執行這個加法。

至於這個數字是十進位、二進位、八進位還是一千五百三十二進位,這個根本不重要。畢竟一個數字可以隨意轉換到任意一個進位,究竟用哪個進位純粹看習慣。

從人類的習慣上看,十進位最方便一點,畢竟人有十個手指,掰指頭數數的時候方便。

但是計算機用二進位稍微方便一點,因為二進位下每一個數位的狀態數最少。十進位有十個狀態,而二進位只有兩個,這樣的話電路設計起來能稍微方便一點。

方便的點在於,每個數位在電路里是用電壓來表示的。假如要表示十進位,那麼可能就會用0v代表0、1v代表1、2v代表2,,,我要分辨這個數位是3還是7,那就需要測試並比較電壓,這就不太方便。

那麼二進位呢?可以用無電壓(斷路)代表0,用有電壓(通路)代表1,設計起來簡單一點。


額,怎麼說呢,誰告訴你計算機語言是二進位的?目前我還沒用過一款二進位語言。無論是B、C、JAVA等等等等,都不是二進位的好麼?底層一點兒的宏彙編都不會封裝成二進位。

如果你是問為啥最終要以二進位方式運行的話,那麼答案就是與硬體有關,使用二進位的開關量來完成數據存儲和硬體操作的成本是最低的,效率是最高的。


能力有限僅作參考 如有錯誤還望指正

首先要清楚的是計算機根本上可以通俗理解為是一個個開關(高低電平)經過複雜的邏輯電路形成一個可以用於計算的機器,0低1高。我們現在使用的面向對象的高級編程語言雖然已經看不到二進位的影子 但經過編譯後真正在計算機上跑起來時仍然是二進位代碼,就好比你與一個只會說英語的外國人交流,要想要他聽懂你的話,就只能翻譯將自己的意思翻譯成英語,他才能理解。

同樣的對於計算機來講由於本質上就是個開關,你能讓他做的就只有通過開啟(1)關閉(0),如果一個開關開啟代表「是」,關閉代表「不」,那麼你就可以控制這個開關來錶帶你的判斷。兩個的組合就是00,01,10,11就可以代表四個結果,等等。

那麼是不是如果不用開關來做計算機的硬體,換成別的如果一開始就能表達多種意思是不是就可以不用二進位呢?答案是肯定的,如現在的量子計算機,生物計算機等等。


其實考慮的就是一個問題,進位數據如何用元件的某一信號量表示。如今的電子元器件都是用電平,電平穩定易操作易傳遞。那要確定底層邏輯運算用多少進位,就看電平怎麼表示。你大可把1V的電平劃分為10份,0V~0.1V表示0,0.1V~0.2V表示1,依次類推,0.9V~1.0V表示9,但問題隨之而來,一旦有輕微的擾動,一段電平所記錄的數據,比如0.54V表示5,變成了0.61V表示6,那整個計算機就是一臺廢品。目前的計算機採用二進位是因為,把1V電平劃分為0V~0.1V表示0,0.1V~0.9V表示不確定狀態,0.9V~1.0V表示1,中間增加了很寬的不確定狀態,工作極其穩定。計算機的工作電壓不能太高,而中間的不確定狀態電平越寬,計算機越可靠,所以最合適的就是使用二進位。一旦提高進位,符號電平之間的界限就會越來越窄,可靠性將急速下降。當然,具體計算機實際上的工作電平不是1V,不同機器各不相同。

還有一個歷史問題,早期的計算機研製者,在尋找可以實現機器運算的器件時,首先從繼電器中找到方法,把繼電器的通和斷對應為二進位中的0和1,在對二進位計算設備做了大量研究和研發後,對二進位計算設備的理論趨於完善,相比較,其他進位的計算設備還是一片空白,所以二進位計算機得到膨脹式發展。


推薦閱讀:
相關文章