歡迎來到進位制的世界!

你有沒有想過,電腦本質上不過是由數百萬個微小的「開/關」開關所組成的,它是如何顯示你最喜歡的遊戲、影片和照片的呢?這一切都歸結於我們如何表示數據。在本章中,我們將探討進位制 (Number Bases)——這是電腦用來理解世界的不同「計數語言」。

別擔心如果你還沒覺得自己是個「數學高手」!我們將透過簡單的技巧和清晰的例子,逐步為你拆解這些概念。學完之後,你就能像專業人士一樣說「電腦語言」(二進位與十六進位)了。


1. 什麼是進位制?

進位制 (Number Base)(或稱基數/Radix)是指在特定計數系統中可用的數字個數。它告訴我們在必須「進位」到下一欄之前,我們可以使用多少個不同的符號。

電腦科學中常見的進位制:

  • 十進位 (Decimal, Base 10):這是我們人類日常使用的!我們有十個數字(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)。想像一下用十根手指頭來數數。
  • 二進位 (Binary, Base 2):這是電腦的母語。它只有兩個數字:01。電腦之所以使用這種進位制,是因為它們的硬體是由處於「關」(0) 或「開」(1) 狀態的開關所組成的。
  • 十六進位 (Hexadecimal, Base 16):這是程式設計師使用的「速記法」。它有 16 個數字:0–9 以及字母 A–F。

如何辨識進位制:

為了避免混淆,我們使用下標 (subscript) 來顯示我們正在使用的進位制。
例子: \(67_{10}\) 是十進位,\(1011_{2}\) 是二進位,而 \(AE_{16}\) 是十六進位。

快速複習:基數告訴你擁有多少個符號。十進位有十個符號;二進位有兩個符號。


2. 二進位 (Base 2):二的冪次方

二進位中,每一欄位的數值都是其右側欄位的兩倍。我們稱之為位值 (place values)。在十進位中,我們有個位、十位、百位。而在二進位中,我們則有個位、二位、四位、八位,以此類推。

二進位位值表 (以 8 個位元/1 個位元組為例):

\(128\) | \(64\) | \(32\) | \(16\) | \(8\) | \(4\) | \(2\) | \(1\)

記憶小撇步:從最右邊的 1 開始,向左移動時只需不斷加倍即可!

例子:將 \(1011_{2}\) 轉換為十進位

1. 將二進位數字放入你的位值表中:
(8位欄:1) | (4位欄:0) | (2位欄:1) | (1位欄:1)

2. 將所有標示為「1」的位值相加:
\(8 + 0 + 2 + 1 = 11_{10}\)

你知道嗎?「Bit」(位元)這個詞其實是 Binary Digit(二進位數字)的縮寫!


3. 十六進位 (Base 16):速記工具

使用十六進位(或稱「Hex」)是因為二進位字串對人類來說太長且難以閱讀。一個十六進位數字正好可以代表四個二進位位元(即一個半位元組 Nibble)。

十六進位數字:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

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

類比:如果二進位像是拼寫出單字中的每一個字母,那麼十六進位就像是使用速記符號或 Emoji 來代表整個單字。書寫起來快多了!

重點總結:我們使用十六進位是因為它對人類來說更易讀,而且比起一長串的 0 和 1,出錯的機率更低。


4. 進位制間的轉換

這是你考試的核心技能!讓我們拆解最常見的轉換方法。

A. 二進位轉十六進位(「四位一組」技巧)

這是最簡單的轉換方式!
1. 從右邊開始,將二進位數每四個分為一組。
2. 計算每一組的數值 (0–15)。
3. 將這些數值轉為十六進位數字。

例子:將 \(11010110_{2}\) 轉為十六進位。
第 1 組(左):\(1101\) = \(8+4+0+1 = 13\) (即 D)
第 2 組(右):\(0110\) = \(0+4+2+0 = 6\) (即 6)
結果:\(D6_{16}\)

B. 十六進位轉二進位

只要將「四位一組」的技巧反過來操作即可!
1. 拿出每一個十六進位數字。
2. 將其轉換為 4 位元的二進位數。
3. 將它們拼在一起。

例子:將 \(2A_{16}\) 轉為二進位。
\(2\) = \(0010\)
\(A (10)\) = \(1010\)
結果:\(00101010_{2}\)

C. 十進位轉二進位(「減法」法)

1. 看看你的二進位位值表 (\(128, 64, 32, 16, 8, 4, 2, 1\))。
2. 找出能放入該數的最大位值。
3. 在該欄位放一個「1」,減去該數值,然後對剩餘的部分重複此過程。

例子:將 \(45_{10}\) 轉為二進位。
128 能放入嗎?不行 (0)。64 能放入嗎?不行 (0)。
32 能放入嗎?可以 (1)。\(45 - 32 = 13\)。
16 能放入嗎?不行 (0)。
8 能放入嗎?可以 (1)。\(13 - 8 = 5\)。
4 能放入嗎?可以 (1)。\(5 - 4 = 1\)。
2 能放入嗎?不行 (0)。
1 能放入嗎?可以 (1)。\(1 - 1 = 0\)。
結果:\(00101101_{2}\)


5. 為什麼要費心使用十六進位?

你可能會被問到為什麼電腦科學要使用十六進位。這裡有三個你需要記住的主要原因:

1. 轉換容易:在二進位和十六進位之間轉換非常簡單(使用四位一組法)。
2. 人類可讀性高:比起冗長的二進位字串(例如顏色代碼如 \(#FF5733\)),十六進位要短得多,也更容易被人理解。
3. 較少出錯:因為它比較短,程式設計師在輸入時出錯的機率更低。

需避免的常見錯誤:當將十進位轉為十六進位時,別忘了 10 是 A,而不是「10」。如果你把 \(A6_{16}\) 寫成了 \(106_{16}\),那你整個數值就完全改變了!


快速複習框:
  • Base 2 (二進位):數字 0, 1。位值為 2 的冪次方。
  • Base 10 (十進位):數字 0–9。正常人類計數方式。
  • Base 16 (十六進位):數字 0–9, A–F。用作二進位的速記法。
  • 1 個十六進位數字 = 4 個位元 (Bits)。這是兩者之間「神奇的連接點」。

別擔心,剛開始覺得複雜是正常的!就像任何語言一樣,只需要一點練習即可。今天就試著把你的年齡轉換成二進位吧!