二進位、十進位與十六進位:如何互相換算

進位換算看起來像魔法,但你一旦明白它永遠是同一個道理,就會發現很簡單:每個數字的值,取決於它所在的位置。這裡教你手算二進位轉十進位、十進位轉二進位,輕鬆讀懂十六進位,並把文字換成位元,還附有逐步算出的範例,以及一張 0 到 15 的對照表。

更新日期:

什麼是位值系統

在十進位數 4,095 中,4 的值並不是 4,而是 4,000,因為它在千位。每個位置都會把數字乘上 10 的次方(1、10、100、1,000……)。這就是位值系統,而「基數」就是使用的不同數字的個數:十進位是十個。

二進位的原理一樣,只是基數是 2:只有 0 和 1,而且每個位置的值都是前一位的兩倍。十六進位的基數是 16:十六個數字是 0 到 9 加上字母 A 到 F,每個位置的值是前一位的 16 倍。電腦使用二進位,是因為電路只需要分辨兩種狀態(關和開),而十六進位則是把這些位元寫短的一種方式。

每個位置的值。把 2 的次方背到 128,幾乎所有計算都能省力。
位置(由右到左)二進位的值十六進位的值
第 1 位11
第 2 位216
第 3 位4256
第 4 位84,096
第 5 位1665,536
第 6 位321,048,576
第 7 位6416,777,216
第 8 位128268,435,456

手算:二進位轉十進位

把每個數字配上它所在位置的值,然後只把有 1 的位置加起來。以 1101 為例:由右到左,各位置的值是 1、2、4 和 8。

  1. 寫下這個數字,並在下面寫出每個位置的值:1 1 0 1 的下面是 8 4 2 1。
  2. 看看每個位置上是什麼:8 的位置是 1,4 的位置是 1,2 的位置是 0,1 的位置是 1。
  3. 忽略是 0 的位置(這裡是 2 的位置)。
  4. 相加:8 + 4 + 0 + 1 = 13。所以二進位的 1101 就是十進位的 13。

位數更多時也是一樣的:11111111 是 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255,這是 8 位元能容納的最大值。而 10110110 是 128 + 32 + 16 + 4 + 2 = 182。

十進位轉二進位:連續除以 2

把這個數字一次又一次地除以 2,並記下每次除法的餘數(一定是 0 或 1),直到商為 0。把餘數由下往上讀,就是二進位數。以 45 為例:

由下往上讀餘數,得到 101101。要驗算的話,把它加起來:32 + 8 + 4 + 1 = 45。

還有一種很多人偏好的方法:由大到小依序減去 2 的次方。以 200 為例:128 放得下(剩 72),64 放得下(剩 8),32、16 放不下,但 8 放得下(剩 0)。用到的位置是 128、64 和 8,所以 200 = 11001000。

十六進位:十六個數字與一張隨手可查的對照表

因為 10 到 15 沒有對應的數字,所以用字母 A、B、C、D、E 和 F 來表示。一個十六進位數字剛好等於四個位元(一個「半位元組」,nibble),這就是它這麼方便的原因:一個位元組有 8 個位元,只要兩個十六進位數字就能寫出來。

要把十六進位換成十進位,把每個數字乘上它所在位置的 16 的次方,再相加。例如,3F = 3 × 16 + 15 = 63,A3 = 10 × 16 + 3 = 163。

0 到 15 在工具所顯示的四種進位中的寫法。
十進位二進位(4 位元)八進位十六進位
0000000
1000111
2001022
3001133
4010044
5010155
6011066
7011177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F

為什麼要用十六進位:位元組、顏色與位址

1 個位元組是 8 個位元,範圍從 0 到 255(00000000 到 11111111)。手寫位元既慢又容易出錯;用十六進位的話,同一個位元組只要兩個字元,從 00 到 FF。要把二進位換成十六進位,從右邊起每四個位元分成一組,再把每一組換成對照表中的數字。例如:11010111 分成 1101 和 0111,也就是 D 和 7,所以是 D7。換成十進位是 13 × 16 + 7 = 215。

最廣為人知的例子是網頁顏色。在 #FF8800 中有三個位元組:FF 是紅色(255),88 是綠色(136),00 是藍色(0)。這是一種鮮豔的橘色:紅色全滿、綠色略多於一半、沒有藍色。十六進位也會出現在記憶體位址、錯誤代碼和網路識別碼中。

用 ASCII 把文字換成二進位

電腦把每個字母存成一個數字,再把這個數字存成位元。在 ASCII 表中,A 是 65,8 位元的二進位是 01000001。「Hi」這個詞有兩個字母:H 是 72(01001000),i 是 105(01101001),所以寫成 01001000 01101001。「Hola」則是 72、111、108 和 97,也就是 01001000 01101111 01101100 01100001,用十六進位寫是 48 6F 6C 61。

這個工具使用 UTF-8 編碼:基本的英文字母每個字元佔 1 個 8 位元的位元組,但 ñ、帶重音符號的字母或表情符號會佔好幾個位元組,因此超過 8 位元。例如 ñ 是兩個位元組:11000011 10110001(十六進位為 C3 B1)。

如何用工具完成這一切

「二進位、十進位與十六進位」換算器,可以用來驗算你的手算結果,或在算很長的數字時避免出錯。

  1. 在對應進位的欄位輸入數字:「十進位(基數 10)」、「二進位(基數 2)」、八進位或「十六進位(基數 16)」。其他三個欄位會自動填好。
  2. 如果輸入的數字不屬於該進位(例如二進位中出現 2),工具會提醒你。
  3. 若要轉換文字,請在「文字」欄位輸入,就能看到「二進位(每個字元 8 位元)」以及依位元組顯示的十六進位。你也可以貼上以 8 位元為一組的位元,換回文字。
  4. 遇到特殊的進位,請使用「任意進位(2 到 36)」:選擇來源進位、目標進位,再輸入數字。

限制:只能換算非負整數(不含小數或正負號),而且不會替你在左邊補 0,所以如果你想要固定 8 位元,需要自己補齊(13 是 00001101)。你輸入的內容都不會離開你的瀏覽器。

常見錯誤

附解答的練習題

先試著自己解每一題,再看答案,最後用工具驗算。

常見問題

怎麼把二進位的 1101 換成十進位?

把有 1 的位置的值加起來:8 + 4 + 1 = 13。從右數起第二位是 0,所以 2 不用加。

255 的二進位和十六進位是多少?

255 的二進位是 11111111,十六進位是 FF。這是 8 位元的一個位元組所能容納的最大值。

十六進位為什麼要用字母?

因為它需要十六個不同的符號,而十進位只提供十個(0 到 9)。所以 A 代表 10、B 代表 11、C 代表 12、D 代表 13、E 代表 14、F 代表 15。

8 個位元可以表示多少個不同的數字?

256 個,從 0 到 255。一般來說,n 個位元可以表示 2 的 n 次方個值。

這個工具能換算負數或小數嗎?

不行,只支援非負整數。文字使用 UTF-8,所以帶重音符號的字母和表情符號會超過 8 位元。