歡迎來到進位制的世界!

哈囉,未來的電腦科學家們!這一章「進位制轉換 (Converting between Number Bases)」是理解電腦如何儲存與處理資訊的基石。如果這些數字一開始看起來很陌生,請別擔心——這就像學習一門新語言一樣。一旦你掌握了規則,你很快就能隨心所欲地進行轉換!

在本章中,我們將學習如何在計算機領域中最重要的三種進位制之間進行轉換:十進位 (Denary/Base 10)二進位 (Binary/Base 2),以及十六進位 (Hexadecimal/Base 16)

為什麼我們需要不同的進位制?

我們使用十進位是因為我們有 10 根手指(這真是個方便的巧合!)。然而,電腦只懂電力——不是 ON(開)就是 OFF(關)。這種開/關狀態由 1 和 0 代表,這就是為什麼它們使用二進位。十六進位則是一種方便的速記法,讓程式設計師能快速閱讀長串的二進位碼!

三種基本的進位制

1. 十進位 (Denary - Base 10)

這是我們日常生活中使用的標準數字系統。它使用 10 個數字(0 到 9)。

  • 基數: 10
  • 使用的數字: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • 位值 (10 的冪): \(10^3\) (千位), \(10^2\) (百位), \(10^1\) (十位), \(10^0\) (個位)

2. 二進位 (Binary - Base 2)

這是電腦的母語。它只使用兩個數字:0 和 1。

  • 基數: 2
  • 使用的數字: 0, 1
  • 關鍵術語: 單個二進位數字稱為位元 (bit)。八個位元組成一個位元組 (byte)
  • 位值 (2 的冪): \(2^7, 2^6, 2^5, 2^4, 2^3, 2^2, 2^1, 2^0\) (128, 64, 32, 16, 8, 4, 2, 1)

3. 十六進位 (Hexadecimal - Base 16)

十六進位用於以緊湊的方式表示長串的二進位數字(例如顏色代碼或記憶體位址)。由於我們需要 16 個不同的符號,我們使用 0-9,然後加上字母 A-F。

  • 基數: 16
  • 使用的數字: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
十六進位對照表

這張表至關重要!請務必記住 A 到 F 代表的十進位數值。

A = 10
B = 11
C = 12
D = 13
E = 14
F = 15

轉換 1:十進位轉二進位 (十進位轉二進位)

我們使用連續除以 2 法 (Repeated division by 2)。這是將十進位數字轉換為二進位最可靠的方法。

步驟拆解:將十進位的 149 轉換為二進位

目標: 將 \(149_{10}\) 轉換為二進位。

  1. 將十進位數字除以 2。
  2. 記錄餘數(只會是 0 或 1)。
  3. 將商取整數繼續進行除法。
  4. 持續計算直到商為 0。
  5. 將餘數由下往上讀取。

\(149 \div 2 = 74\) 餘數 1
\(74 \div 2 = 37\) 餘數 0
\(37 \div 2 = 18\) 餘數 1
\(18 \div 2 = 9\) 餘數 0
\(9 \div 2 = 4\) 餘數 1
\(4 \div 2 = 2\) 餘數 0
\(2 \div 2 = 1\) 餘數 0
\(1 \div 2 = 0\) 餘數 1

由下往上讀取餘數:10010101

十進位轉二進位的小撇步

一定要使用連續除以 2 的方法,並記住黃金法則:必須由下往上讀取餘數,才能得到最終的二進位答案。

轉換 2:二進位轉十進位 (二進位轉十進位)

這種轉換通常比較容易!我們使用位值 (Place value)系統,也就是 2 的冪次方。

步驟拆解:將二進位的 10110011 轉換為十進位

目標: 將 \(10110011_2\) 轉換為十進位。

  1. 寫下二進位的位值(從 128 到 1)。(因為有 8 個位元,所以我們使用 8 個位置)。
  2. 將二進位數字直接寫在位值下方。
  3. 將位值下方為 '1' 的數值相加。

位值:   128   64   32   16   8   4   2   1
二進位數字:      1     0     1     1     0     0     1     1

計算:
\(128 \times 1 = 128\)
\(64 \times 0 = 0\)
\(32 \times 1 = 32\)
\(16 \times 1 = 16\)
\(8 \times 0 = 0\)
\(4 \times 0 = 0\)
\(2 \times 1 = 2\)
\(1 \times 1 = 1\)

總和: \(128 + 32 + 16 + 2 + 1 = 179\)

十進位數值為 \(179_{10}\)。

位值的記憶輔助

如果一開始覺得困難別擔心! 記住 8 個位元的值:128, 64, 32, 16, 8, 4, 2, 1。它們每向左移動一位,數值就會加倍!

轉換 3 & 4:二進位與十六進位

在二進位與十六進位之間轉換是最簡單的,因為十六進位只是二進位的速記法。每一個十六進位數字恰好代表四個二進位位元。這四個位元被稱為一個半位元組 (nybble)

A. 二進位轉十六進位 (二進位轉十六進位)

步驟拆解:將二進位的 11010110 轉換為十六進位

目標: 將 \(11010110_2\) 轉換為十六進位。

  1. 將二進位數字從右往左每四個位元一組(半位元組)。

    \(1101 \quad 0110\)

  2. 使用 8, 4, 2, 1 的位值,將每組 4 位元轉換為十進位。

    第一組 (1101): \(8+4+0+1 = 13\)
    第二組 (0110): \(0+4+2+0 = 6\)

  3. 將所得的十進位數值轉換為十六進位數字(若有必要則使用 A-F)。

    十六進位中的 \(13\) 是 D
    十六進位中的 \(6\) 是 6

十六進位數值為 D6

B. 十六進位轉二進位 (十六進位轉二進位)

步驟拆解:將十六進位的 3F 轉換為二進位

目標: 將 \(3F_{16}\) 轉換為二進位。

  1. 將每個十六進位數字拆開。 (3 和 F)
  2. 將每個數字轉換為對應的十進位。 (3 和 15)
  3. 將每個十進位數值轉換為 4 位元的二進位組。

數字 3: 十進位 3。使用 8, 4, 2, 1 的位值,我們需要 2 + 1。
\(\rightarrow 0011\)

數字 F: 十進位 15。使用 8, 4, 2, 1 的位值,我們需要 8 + 4 + 2 + 1。
\(\rightarrow 1111\)

組合起來: \(00111111\)

二進位數值為 \(00111111_2\)。(前導零很重要,才能維持 4 位元的結構清楚!)

你知道嗎?

網站上的顏色代碼通常以十六進位書寫!例如,純紅色可能是 #FF0000。FF 代表紅色的亮度為 255(最大亮度)。這比寫出 24 位元的二進位簡短多了!

轉換 5:十進位與十六進位

雖然可以直接轉換(使用重複除以 16 法),但對於 GCSE 學生來說,透過二進位進行轉換通常更安全也更簡單。這能讓你練習剛才學到的技能!

A. 十進位轉十六進位 (經由二進位)

步驟 1: 將十進位轉換為二進位(使用重複除以 2 法)。
步驟 2: 將得到的二進位轉換為十六進位(透過每 4 個位元分組)。

範例:將 \(150_{10}\) 轉換為十六進位
  1. 十進位轉二進位: \(150_{10} = 10010110_2\)
  2. 二進位轉十六進位(每 4 位一組): \(1001 \quad 0110\)
  3. \(1001 = 9\)。 \(0110 = 6\)。
  4. 結果: \(96_{16}\)

B. 十六進位轉十進位 (經由二進位)

步驟 1: 將十六進位轉換為二進位(將每個位數轉換為 4 位元的半位元組)。
步驟 2: 將得到的二進位轉換為十進位(使用 128, 64, 32 等位值)。

範例:將 \(A5_{16}\) 轉換為十進位
  1. 十六進位轉二進位:
    A = 1010
    5 = 0101
    組合: \(10100101_2\)
  2. 二進位轉十進位:

    \(128+0+32+0+0+4+0+1 = 165\)

  3. 結果: \(165_{10}\)

快速複習與常見錯誤

快速複習:轉換流程

關鍵在於理解各種進位制之間的關係:

十進位 \(\leftrightarrow\) 二進位 (使用除法/位值)
二進位 \(\leftrightarrow\) 十六進位 (使用 4 位元分組)

常見陷阱,請避開!

  • 十進位轉二進位時: 忘記將餘數由下往上讀取。
  • 十六進位轉二進位時: 把一個十六進位位數(例如 F=15)寫成了 8 位元。記住,一個十六進位位數永遠等於 4 個位元 (1111)。
  • 二進位轉十進位時: 漏掉位值或是搞混數值(例如弄錯 32 和 16)。在開始之前,請務必清楚寫下 128, 64, 32, 16, 8, 4, 2, 1 這一行位值表。

恭喜你已經學會了資料表示法的核心!熟能生巧——試著把你自己的年齡、門牌號碼或幸運數字在這三種進位制間轉換看看。你絕對沒問題的!