二進位、十六進位完整指南:數字進位制的原理、轉換方法與程式設計應用

電腦的世界充滿了進位制的影子:CSS 裡的 #1A2B3C、記憶體位址 0x7FFFFFFF、Base64 編碼、URL 的 %20……這些看似神秘的字串,背後都是同一個概念——進位制(Number Systems)。理解它,你就能讀懂更多底層技術的邏輯。

一、什麼是進位制?

進位制是「用多少個符號來表示數字」的規則。我們日常使用十進位(Base-10),因為有 0–9 共 10 個符號;當數到 9 的下一個,就「進位」變成 10。

同理:

  • 二進位(Base-2):只有 0 和 1,數到 1 的下一個就進位,變成 10(讀作「一零」,代表十進位的 2)
  • 八進位(Base-8):符號 0–7,數到 7 下一個進位
  • 十六進位(Base-16):符號 0–9 加上 A–F(A=10, B=11, …, F=15),數到 F 下一個進位
十進位二進位八進位十六進位
0000000
1000111
81000108
10101012A
15111117F
16100002010
25511111111377FF

二、二進位(Base-2)

二進位是電腦硬體的語言。電路只有「通電」與「斷電」兩種狀態,正好對應 1 和 0。每一個 0 或 1 稱為一個位元(bit),8 個位元組成一個位元組(byte)

十進位轉二進位

方法:反覆除以 2,記錄餘數,由下往上讀。

13 ÷ 2 = 6 餘 1  ↑
 6 ÷ 2 = 3 餘 0  ↑
 3 ÷ 2 = 1 餘 1  ↑
 1 ÷ 2 = 0 餘 1  ↑
結果:1101(十進位 13 = 二進位 1101)

二進位轉十進位

方法:每一位乘以 2 的對應次方,加總。

1101 = 1×2³ + 1×2² + 0×2¹ + 1×2⁰
     = 8 + 4 + 0 + 1
     = 13
實際應用:檔案的 checksum(如 SHA-256)底層計算都是位元運算。輸出的長串十六進位字串,本質上就是二進位雜湊值的十六進位表示。可用Checksum 工具產生檔案的雜湊值並驗證完整性。

三、十六進位(Base-16)

十六進位是程式設計中最常見的進位制,因為它和二進位之間有完美的對應關係:每 4 個位元恰好對應一個十六進位數字

二進位:1111 1010 1011 1100
十六進位:   F    A    B    C  → FABC

這讓十六進位成為表達記憶體位址、顏色碼、雜湊值的理想格式——既比二進位短,又和底層二進位有直接的對應。

十進位轉十六進位

方法:反覆除以 16,餘數 10–15 用 A–F 表示。

255 ÷ 16 = 15 餘 15(F)  ↑
 15 ÷ 16 =  0 餘 15(F)  ↑
結果:FF(十進位 255 = 十六進位 FF)

實際案例:CSS 顏色碼

CSS 顏色碼 #FF5733 是三對十六進位數字,分別代表 R(紅)、G(綠)、B(藍):

色碼十六進位十進位(0–255)
紅(R)FF255
綠(G)5787
藍(B)3351

因此 #FF5733 等同於 rgb(255, 87, 51)——一種偏橘紅的顏色。

四、URL 編碼中的十六進位

URL 只允許特定字元,不允許的字元(如空格、中文、特殊符號)必須用百分比編碼(Percent Encoding)表示:將字元的 UTF-8 位元組轉為十六進位,前面加 %

原始字元URL 編碼說明
空格%20十六進位 20 = 十進位 32(空格的 ASCII 碼)
/%2F斜線在路徑之外需編碼
%E4%B8%ADUTF-8 編碼為 3 個位元組
@%40在某些 URL 部分需編碼
立即試用:把含有中文或特殊符號的 URL 貼到URL 編碼工具,即時查看每個字元對應的十六進位編碼。

五、Base64:另一種常見的編碼方式

Base64 並非進位制,而是一種將二進位資料轉為可列印文字的編碼方式。它把每 3 個 byte(24 bits)分成 4 組 6-bit,每組對應 64 個字元之一(A–Z、a–z、0–9、+、/)。

原始(ASCII):Man
二進位:01001101 01100001 01101110
分組(6-bit):010011 010110 000101 101110
Base64:       T      W      F      u  → TWFu

Base64 輸出比原始資料大約 33%(每 3 bytes 變 4 字元),但能安全地在只支援文字的管道(如 email、HTML 屬性、JSON)中傳輸二進位資料。

立即編碼:把任意文字或檔案內容貼入Base64 編解碼工具,即時看到編碼結果與解碼還原。

六、進位制在程式設計中的實際應用

記憶體位址

除錯工具和記憶體傾印通常以十六進位顯示位址,例如 0x7FFE1234。前綴 0x(C/C++/Python/JS)、#(CSS)或 0b(二進位)是程式語言標示進位制的常見方式。

位元遮罩(Bitmask)

Unix 檔案權限用八進位表示,如 chmod 755

7 = 111(二進位)= 讀(4) + 寫(2) + 執行(1)
5 = 101(二進位)= 讀(4) + 執行(1)
5 = 101(二進位)= 讀(4) + 執行(1)

顏色計算

前端工程師常需要在 HEX 與 RGB 之間換算,理解十六進位讓這個過程一目瞭然。色彩轉換、對比度計算等工作也建立在這個基礎上。

雜湊輸出

MD5 輸出 128 bits,以 32 個十六進位字元表示(每個字元 = 4 bits);SHA-256 輸出 256 bits,以 64 個十六進位字元表示。

七、各語言中的進位制表示

語言二進位八進位十六進位
Python0b10100o120xA
JavaScript0b10100o120xA
C / C++—(無原生語法)0120xA
Java0b10100120xA
CSS#FF5733

總結

進位制不是艱深的理論,而是理解許多日常技術的鑰匙:

  • 二進位是電腦底層的語言,位元運算的基礎
  • 十六進位是程式設計的通用語,顏色碼、記憶體位址、雜湊值都用它表示
  • Base64 建立在二進位之上,解決了二進位資料在文字環境中傳輸的問題
  • URL 編碼用十六進位標記不允許的字元,讓網址可以包含任意文字

理解這些基礎後,你看到 %E4%B8%AD#FF5733TWFu 這些字串,就能立刻讀懂它們代表的意義。