搞懂進制轉換:從 2進制到 16進制的完整攻略

前言
進制轉換是計算機科學中最基礎的主題之一,卻也是讓很多人頭痛的地方。雖然考試可以背公式,但理解「為什麼這樣算」才能真正內化這套邏輯。
這篇文章會用清楚的方式帶你搞懂:
- 什麼是進制
- 怎麼把任意進制轉成十進制(乘的過程)
- 怎麼把十進制轉成任意進制(除的過程)
- 2 進制、8 進制、16 進制之間的捷徑
先搞懂:什麼是進制?
「進制」是一種數字的表示方式,決定了每位數能用到哪些符號。
| 進制 | 使用的符號 | 範例 |
|---|---|---|
| 2 進制(Binary) | 0, 1 | 0b1010 |
| 8 進制(Octal) | 0 ~ 7 | 0o12 |
| 10 進制(Decimal) | 0 ~ 9 | 10 |
| 16 進制(Hexadecimal) | 0 ~ 9, A ~ F | 0xA |
十六進制用 A 代表 10、B 代表 11、…、F 代表 15。
轉十進制:從右往左,乘以進制的位數平方
將其他進制轉成十進制,核心概念是:
每位數 × (進制)^(位數位置),從右邊數來第 0 位開始
二進制轉十進制
0b1010(從右往左看)
位置: 3 2 1 0
位數: 1 0 1 0公式:
0b1010 = 0 × 2^0 + 1 × 2^1 + 0 × 2^2 + 1 × 2^3
= 0 + 2 + 0 + 8
= 10對應的 Python 驗證:
>>> int("1010", 2)
10八進制轉十進制
0o175(從右往左看)
位置: 2 1 0
位數: 1 7 5公式:
0o175 = 5 × 8^0 + 7 × 8^1 + 1 × 8^2
= 5 + 56 + 64
= 125十六進制轉十進制
0x3FA(從右往左看)
位置: 2 1 0
位數: 3 F A
(15) (10)公式:
0x3FA = 10 × 16^0 + 15 × 16^1 + 3 × 16^2
= 10 + 240 + 768
= 1018十進制轉其他進制:除法倒取餘數
將十進制轉成其他進制,用的是「除法」:
把目標數字除以目標進制,記錄餘數,持續除到商為 0,最後把餘數由下往上讀。
十進制轉二進制
把 42 轉成二進制:
42 ÷ 2 = 21 ... 餘 0 ↑ 最後讀取的次序
21 ÷ 2 = 10 ... 餘 1 │
10 ÷ 2 = 5 ... 餘 0 │
5 ÷ 2 = 2 ... 餘 1 │
2 ÷ 2 = 1 ... 餘 0 │
1 ÷ 2 = 0 ... 餘 1 ↓ 第一個讀取的次序
從下往上讀:101010
所以 42 = 0b101010十進制轉十六進制
把 478 轉成十六進制:
478 ÷ 16 = 29 ... 餘 14 (E)
29 ÷ 16 = 1 ... 餘 13 (D)
1 ÷ 16 = 0 ... 餘 1
從下往上讀:1DE
所以 478 = 0x1DE進制之間的捷徑:2、8、16 的特殊關係
2、8、16 都是 2 的次方數,所以他們之間有個非常方便的對應關係:
| 關係 | 說明 |
|---|---|
| 1 位十六進制 = 4 位二進制 | 每 4 個二進位元剛好對應 1 個十六進位元 |
| 1 位八進制 = 3 位二進制 | 每 3 個二進位元剛好對應 1 個八進位元 |
二進制 ↔ 十六進制(直接對應)
0b 1101 1010
---- ----
D A
所以 0b11011010 = 0xDA二進制 ↔ 八進制
0b 101 110 010
--- --- ---
5 6 2
所以 0b101110010 = 0o562>>> bin(0xDA)
'0b11011010'
>>> oct(0b101110010)
'0o562'完整對照表
| 十進制 | 二進制 | 八進制 | 十六進制 |
|---|---|---|---|
| 0 | 0000 | 0 | 0 |
| 1 | 0001 | 1 | 1 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 15 | 1111 | 17 | F |
| 16 | 10000 | 20 | 10 |
| 255 | 11111111 | 377 | FF |
結語
進制轉換的核心只有兩個方向:
- 轉十進制 → 乘:從右往左,每位數乘以
進制^位數 - 十進制轉其他 → 除:一直除以目標進制,把餘數倒過來讀
而 2、8、16 三者之間因為都是 2 的次方,所以有固定的位元對應關係,可以直接查表轉換,不需要透過十進制。