歡迎來到數據表示法!

你有沒有想過,電腦本質上只是一堆微小的電子開關,它是如何讓你觀看高清電影或暢玩大型遊戲的呢?這一切都歸功於數據表示法 (Data Representation)。在本章中,我們將學習電腦如何進行「計數」,以及它們如何將簡單的數字轉化為我們日常看到的文字和符號。別擔心,一開始看起來可能有很多數學運算——但只要你掌握了規律,就會發現它就像數 1、2、3(或者應該說 0 和 1)一樣簡單!

1. 三大進位制

在日常生活中,我們使用十進位 (Decimal)。但電腦更偏好二進位 (Binary),而程式設計師為了讓數值更易於閱讀,通常會使用十六進位 (Hexadecimal)。讓我們逐一拆解:

A. 十進位 (Decimal, Base-10)

這是你從幼稚園就開始使用的系統。它使用了 10 個數字:0, 1, 2, 3, 4, 5, 6, 7, 8, 9
類比:你可以把它想像成用十根手指頭數數。

B. 二進位 (Binary, Base-2)

電腦使用電力運作,通常只有「開」或「關」兩種狀態。因此,它們只使用 2 個數字:0 和 1。每一個數字稱為一個位元 (bit)(即 Binary Digit 的縮寫)。
類比:就像一個電燈開關,不是向上(1)就是向下(0)。

C. 十六進位 (Hexadecimal, Base-16)

此系統使用 16 個符號。由於數字在 9 之後就不夠用了,我們便使用字母來表示:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A (10), B (11), C (12), D (13), E (14), F (15)

快速複習:為什麼要用十六進位?

10110110 這樣的二進位字串對人類來說很難閱讀。十六進位就像是一種「速記法」。一個十六進位數字可以代表四個二進位位元!對於程式設計師來說,記住 B6 比記住 10110110 要容易得多。

重點總結:二進位是給電腦硬體用的;十進位是給人類用的;十六進位則是程式設計師的「中間地帶」。

2. 不同進位之間的轉換

轉換數字看起來可能很嚇人,但其實只要遵循步驟就能完成。讓我們看看 9569 課程大綱中最常見的轉換方式。

A. 二進位轉十進位(「加權」法)

二進位數字中的每個位置都有一個「權重」,該權重是 2 的冪次方,從右邊開始計算(即 \( 2^0 \))。

逐步範例:將 1011 轉換為十進位
1. 從右至左寫出 2 的冪次方:\( 8, 4, 2, 1 \)
2. 將二進位數字置於下方:
(8 × 1) + (4 × 0) + (2 × 1) + (1 × 1)
3. 將它們相加:\( 8 + 0 + 2 + 1 = 11 \)
4. 因此,\( 1011_2 = 11_{10} \)

B. 十進位轉二進位(「除以 2」法)

不斷將數字除以 2,並記錄餘數。

逐步範例:將 13 轉換為二進位
1. 13 ÷ 2 = 6,餘數 1
2. 6 ÷ 2 = 3,餘數 0
3. 3 ÷ 2 = 1,餘數 1
4. 1 ÷ 2 = 0,餘數 1
5. 由下往上讀取餘數:1101

C. 二進位轉十六進位(「神奇 4 位」規則)

這是最簡單的轉換方式!將二進位位元分成四個一組(從右邊開始分組)。

逐步範例:將 11101011 轉換為十六進位
1. 分成兩組:11101011
2. 將每組轉換為十進位:\( 1110 = 14 \),\( 1011 = 11 \)
3. 將這些數值轉換為十六進位字母:\( 14 = E \),\( 11 = B \)
4. 結果為:EB

避開常見錯誤!

在進行十進位轉十六進位時,別忘了 10 是 A,而不是「10」。如果你在十六進位代碼中寫下「10」,電腦會認為你分別是指「1」和「0」!

重點總結:永遠記住二進位的「位值」:128, 64, 32, 16, 8, 4, 2, 1。如果位元是 1,就加上該數;如果是 0,就跳過它!

3. 在計算機領域的應用

我們為什麼要學這些?因為這些系統在科技世界無處不在!

二進位:用於中央處理器 (CPU)記憶體 (RAM)。在最底層,所有東西都是 1 或 0。
十進位:用於使用者輸入。當你在計算機上輸入「25」時,電腦會獲取該十進位輸入,並將其轉換為二進位來進行運算。
十六進位:用於 HTML 顏色代碼(例如 #FF0000 代表紅色)、網路中的 MAC 位址,以及除錯時使用的記憶體位址

你知道嗎?

世界上總共有 10 種人:一種是懂二進位的,另一種是不懂的!(等等……那個「10」其實就是二進位的「2」!)

4. 字元編碼:ASCII 與 Unicode

數字固然好用,但我們如何表示字母 'A' 或表情符號呢?我們使用字元集 (Character Sets),它們基本上就是巨大的對照表,將數字對應到特定的字元。

A. ASCII (美國標準資訊交換碼)

ASCII 是一個較舊且簡單的系統。它使用 7 個位元(在延伸 ASCII 中使用 8 個位元)來表示字元。
- 範例:在 ASCII 中,數字 65 代表 'A',97 代表 'a'。
- 侷限性:由於它使用的位元數較少,它只能表示英文字母、數字和一些符號。它無法處理中文或阿拉伯文等其他語言。

B. Unicode

Unicode 的誕生就是為了克服 ASCII 的侷限性。它使用更多的位元(通常為 16 或 32 位元),容許超過一百萬種可能的字元!
- 用途:它涵蓋了世界上幾乎每一種書寫語言,外加數學符號和表情符號 (Emojis) 🚀。
- 關係:Unicode 的設計旨在與 ASCII 「向後相容」。這意味著 Unicode 的前 128 個字元與 ASCII 完全相同。

快速複習:ASCII 與 Unicode

ASCII:體積小、效率高,但僅限於英語。
Unicode:體積大、通用性強,用於現代網頁和國際化軟體。

重點總結:字元編碼是電腦能讀懂的二進位數字與我們螢幕上閱讀的人類語言之間的「橋樑」。

最終複習清單

在進入下一章之前,請確保你能:
- [ ] 解釋二進位、十進位與十六進位的區別。
- [ ] 將正整數在十進位與二進位之間互相轉換。
- [ ] 使用 4 位元分組法在二進位與十六進位之間轉換。
- [ ] 舉出十六進位的應用例子(如 CSS 顏色)。
- [ ] 解釋為什麼全球性應用程式會偏好使用 Unicode 而非 ASCII。

繼續練習這些轉換吧!這就像解謎一樣——做得越多,你就會越熟練!