計算機輸出各種文字,圖片,視訊,程式執行結果等一切東西,看起來是個豐富多彩的世界,然而計算機並不像我們看到的那樣聰明,它的功能強大得益於人類編寫的程式、軟體。在所有豐富多彩的表象下,一切系統,程式,圖片等都由0和1組成。一張圖片是一串由0和1組成的序列,一個程式也是由0和1組成的一串序列。這種只使用0和1來計數、記錄的方法叫做二進位制。與之相對應的,人類使用的是十進位制,使用0-9來計數。二進位制跟十進位制很相似,通過與我們熟悉的十進位制的比較,我們可以理解二進位制系統的運作。
十進位制與二進位制
當我們使用十進位制計數的時候,當數到9再沒有別的符號來表示第十個時,我們會在個位上填0,然後在十位上填1,得到10。當數到99時,無法用兩位數字表示第一百個數字時,就會在個位和十位上分別填0,在百位上填1,得到100。如此迴圈往復,我們就可以用0,1,2,3,4,5,6,7,8,9十個符號來表示任何數字。
從上圖看到,2處在百位上,3處在十位上,5處在個位數上。我們可以通過2×100+3×10+5×1=235,也即二百三十五。從右到左,從低位到高位,每一個位權(這個位置上的單位值)都是十的次方。個位上是十的零次方,十位上是十的一次方,百位上是十的二次方,千位上是十的三次方……依次類推,這樣的計數系統以10為基數。我們可以使用以任何一個數字為基數的計數系統。二進位制當然也可以。 那麼當使用二進位制,也即只使用0和1來計數時,每一個位權都是2的次方,從低位到高位,從2的零次方開始,依次為1,2,4,8,16,32,64……把一個二進位制數轉換為十進位制數很簡單,如上圖中的二進位制數10110,通過1×16+0×8+1×4+1×2+1×0得到22,二進位制數0轉換為十進位制數不變,二進位制數1轉換為十進位制數不變,二進位制數10轉換為十進位制數為2,二進位制數11轉換為十進位制數為3。 如何把十進位制轉換為二進位制呢,以上圖為例,把22轉換為二進位制分兩個步驟:- 22被2整除,得到的餘數寫在旁邊,只要得到的結果大於0,則繼續被2整除,把餘數寫在旁邊(當1被2整除時,0×2+1=1,結果為0,餘數為1)。
- 將所有的餘數從下到上排列起來,我們就得到了二進位制數。22的二進位制表達為10110。
類似於十進位制數的一位數,兩位數,三位數,四位數……來表達一個數有多少位,在計算機應用二進位制數時,一位二進位制數被叫做一位元(1bit),兩位二進位制數就可以稱為兩位元(2bits),三位二進位制數稱為三位元(3bits)……為了簡便,又把八位二進位制數(8bits)稱為一個位元組(1Byte)。
編碼
人類只是使用十進位制數來計數,做數學相關的應用,而二進位制就不同了,計算機用它來計數、計算,執行指令,儲存東西、程式,表示顏色,顯示圖片、視訊,那麼這是怎麼做到的呢,答案是通過編碼。編碼就是通過一一對映,將兩種毫無關聯的東西聯絡起來,並且用一種東西來代表另一種東西,這是一種人為的設計。計算機世界裡最著名的編碼要算ASCII碼了,通過設計,鍵盤上的大部分字母和符號都跟某個八位的二進位制數捆綁(對映)在一起,這樣當我們輸入一些英文時,電腦實際做的卻是把跟這些英文一一對應的二進位制數儲存在記憶體裡或者硬碟上。通過各種不同的編碼,電腦僅僅使用0和1就能代表任何東西了。當人類想從電腦中得到相關資訊並且希望能夠看得懂時,會有相應的程式來通過解碼(編碼的逆運算)的方式顯示出來。
計算機採用二進位制的好處
為什麼計算機要採用二進位制而不是採用人們所熟悉的十進位制呢?我們知道,計算機是由各種電子元器件組成,並由電流驅動的。最早的電晶體只具有兩種狀態,磁碟上的一個儲存點的磁極也具有兩種狀態,磁極的南跟北,電子元器件的電平也具有兩種狀態,高和低,這正好跟二進位制的一個位所能代表的狀態所吻合,從物理的角度講,易於元器件的製作,只有兩種狀態,也易於電腦內部清晰的傳遞資訊(不容易出錯)。另外,0和1正好對應邏輯上的真和假,用二進位制表示二值邏輯很自然。最後,二進位制的運演算法則較為簡單,能夠簡化電腦硬體結構。