計算機為什麼需要十六進位制?

語言: CN / TW / HK

實際上計算機本身是不需要十六進位制的,計算機只需要二進位制,需要十六進位制的是人。

每個十六進位制中的數字代表4個位元,你可以非常直觀的從十六進位制中知道對應的二進位制是啥, 比如給定一個十六進位制數,假設其最後一位是9, 那麼你立刻就能知道將該十六進位制數字轉為二進位制後最後四位是1001

  • 十六進位制數字9對應的二進位制為 1001

  • 十六進位制數字19對應的二進位制為1 1001

  • 十六進位制數字119對應的二進位制為1 0001 1001

但是如果給定一個十進位制數字,同樣假設其最後一位是9,你知道其對應的二進位制嗎,顯然你是不知道的。

  • 十進位制數字9對應的二進位制為1001。

  • 十進位制數字19對應的二進位制為1 0011。

  • 十進位制數字119對應的二進位制為111 0111。

在十進位制中你必須知道所有的進位上的數字後才可以將其轉為二進位制,這非常不直觀,顯然如果你想把複雜的十進位制數字轉為二進位制不稍加計算是搞不定的。

因此我們可以得出結論:

十六進位制是二進位制的好朋友,但十進位制不是

那為什麼十六進位制是二進位制的好朋友呢?

關鍵在於進位制數16是2的4次方,2^4 = 16,而進位制數10並不是2的整數次冪,因此8進位制(2^3),16進位制(2^4),32進位制(2^5),64進位制(2^6)等等都是二進位制的好朋友。

有的同學肯定會問,那麼為什麼我們不使用32進位制呢?

使用32進位制,每5個位元位可以用一個32進位制數字來表示,由於人類的數字系統只有0~9,因此在16進制中10是字母a來表示的、11:b、12:c、13:d、14:e、15:f,但如果我們使用32進位制,那麼16:g、17:h.......31:v,這時給一個32進位制數字“apple”,你的大腦可能會一團漿糊,但十六進位制對人類來說基本可以應付得來,原因就在於16進制中人類熟悉的數字佔據了10個,剩下的只借用了6個字母,還算簡單。

因此32進位制及以上都不太適合給人使用,原因就在於:

可讀性太差。

此外使用十六進位制還有一個重要原因:

一個位元組有8個位元

我們知道記憶體是按照位元組粒度來定址的,因此採用的數字系統必須很好的表達一個位元組,也就是8位元,從這個角度上看256進位制(2^8)是最好的,因為一個256進位制就是表達一個位元組,但還是基於可讀性的原因,256進位制對於人類來說記憶負擔過重,而16進位制則剛剛好,一個16進位制數字表示一個位元組的一半(4個位元),兩個16進位制數字正好表示一個位元組。

那為什麼一個位元組有8位元而不是7位元或者9位元呢?其實答案很簡單:

歷史原因

要知道早期的計算機可不是一個位元組8位元,那時一個位元組4位元、6位元或者7位元的都有。

但4位元或者6位元還是太受限制,因為我們需要把字母數字以及標點符號等等轉為二進位制表示,4位元或6位元能表示的數量太少。

到了1963年,ASCII正式提出,該標準使用7位元來表示字元,但當時的IBM System/360大型機採用了8位元位元組,使得8位元位元組開始流行起來,到後來微型計算機出現時也自然採用了這一表示方法。

現在你應該明白了吧。

這個公眾號裡所有的文章都已經彙總在了Github上,地址 https://github.com/xfenglu/everycodershouldknow , 你也可以點選左下方“閱讀原文”直達,歡迎訪問,求star,哈哈

也歡迎大家新增我的微信coder_saver圍觀朋友圈,備註寫“圍觀”二字即可,一起見證我們的成長。