歡迎來到二進位世界!

你好!今天我們將深入探討二進位數系 (Binary Number System)。這是你 AQA AS Level 電腦科學課程中「數據表示基礎 (Fundamentals of data representation)」章節的核心部分。如果一直以來你覺得數學有點可怕,請別擔心;二進位其實非常符合邏輯,比我們日常使用的十進位系統簡單得多。讀完這些筆記後,你就能像電腦一樣閱讀和計算數字了!

為什麼要學這個? 電腦是由數十億個微小的開關組成的,它們只能處於「開啟 (on)」或「關閉 (off)」的狀態。因為只有這兩種狀態,我們使用二進位 (Base 2) 來表示一切——從你最愛的電子遊戲到你現在正在閱讀的文字,統統都是如此。

1. 無號數二進位 (Unsigned Binary)

無號數二進位 (Unsigned binary) 數字僅用於表示正整數 (Positive integers)。它們無法表示負數。

運作原理:位值 (Place Values)

在我們常見的十進位系統(Base 10)中,我們有個位、十位、百位等等。在二進位中,每一欄位都是 2 的冪次方 (power of 2)

對於一個 8-bit 的數字(一個位元組 Byte),其位值如下:
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1

將二進位轉換為十進位

要將像 10100100 這樣的二進位數轉換為十進位,只需將數字為 "1" 的位置所對應的值相加即可:
• (1 x 128) + (0 x 64) + (1 x 32) + (0 x 16) + (0 x 8) + (1 x 4) + (0 x 2) + (0 x 1)
• \( 128 + 32 + 4 = 164 \)

將十進位轉換為二進位

「減法法」:
1. 找出能放入該數字中的最大 2 的冪次方。
2. 在該欄位填入 1,並從總數中減去該數值。
3. 對剩餘數值重複上述步驟,直到歸零為止。

快速複習:最小值與最大值
對於 \( n \) 個位元 (bits):
最小值永遠是 0
最大值是 \( 2^n - 1 \)。
例如:8 個位元時,最大值為 \( 2^8 - 1 = 255 \)。

重點總結: 二進位只是一種計算方式,它只有兩個數字:0 和 1。「無號數」版本僅用於表示零和正數。

2. 無號數二進位算術

電腦也需要進行運算!你需要掌握如何進行無號數二進位整數的加法和乘法。

二進位加法

加法遵循四個簡單規則:
• \( 0 + 0 = 0 \)
• \( 0 + 1 = 1 \)
• \( 1 + 1 = 0 \) (進位 1 到下一欄)
• \( 1 + 1 + 1 = 1 \) (進位 1 到下一欄)

常見錯誤: 忘記了「進位」。務必將進位清楚地寫在下一欄的上方,以免遺漏!

二進位乘法

二進位乘法實際上比十進位乘法更容易,因為你只需要處理 0 或 1。本質上就是「移位並相加」。
例如:\( 101 \times 11 \)
1. 將 101 乘以第一個「1」(從右側算起):101
2. 將 101 乘以第二個「1」,但向左移一位:1010
3. 將它們相加:\( 101 + 1010 = 1111 \)。

重點總結: 如果你會算 1+1,你就會做二進位算術。只要逐欄處理即可。

3. 有號數二進位 (二補數 Two's Complement)

如果我們需要表示負數該怎麼辦?我們使用一種稱為二補數 (Two's Complement) 的系統。

最高有效位元 (MSB) 的魔法

在二補數中,最左側的位元 (MSB) 變成負值。對於一個 8-bit 的數字,欄位看起來像這樣:
-128 | 64 | 32 | 16 | 8 | 4 | 2 | 1

如何將數字變為負數

如果你有一個正數(例如 5)想將其變為負數 (-5):
1. 寫出正數的二進位形式:00000101
2. 反轉 (Flip) 所有位元(將 0 變為 1,1 變為 0):11111010
3. 將結果加 111111011
記憶小撇步:「反轉並加一 (Flip and Fill)」——反轉位元,再補上 1!

二進位減法

在電腦科學中,我們其實不太做「減法」。相反,我們是加上一個負數
要計算 \( 10 - 4 \),你可以計算 \( 10 + (-4) \),其中 -4 使用二補數表示。

有號數二進位的範圍

對於 \( n \) 個位元,範圍為:
最小值: \( -2^{n-1} \)
最大值: \( 2^{n-1} - 1 \)
例如:8 個位元時,範圍是 -128 到 +127。

你知道嗎? 使用二補數是因為它允許 CPU 對正數和負數使用相同的加法硬體。這非常高效!

重點總結: 二補數透過將最左側的欄位設為負值,讓我們能夠表示負數。

4. 帶有分數部分的數字 (定點數 Fixed Point)

有時我們需要表示小數(例如 10.5)。為此,我們使用定點數二進位 (Fixed Point Binary)

二進位小數點

我們想像在一個固定位置有一個「二進位點」(類似小數點)。小數點右側的欄位代表分數(二分之一、四分之一、八分之一等)。

以 8-bit 定點數為例,其中 4 個位元代表整數部分,4 個位元代表分數部分:
8 | 4 | 2 | 1 | . | 0.5 | 0.25 | 0.125 | 0.0625

轉換範例

要用二進位表示 6.75
1. 整數部分 (6) 為:\( 4 + 2 \),即 0110
2. 分數部分 (0.75) 為:\( 0.5 + 0.25 \),即 1100
3. 結果:0110.1100

如果覺得這有點複雜,不用擔心! 只要記住,每向右移動一欄,數值就是除以 2,正如每向左移動一欄,數值就是乘以 2 一樣。

重點總結: 定點數二進位使用特定的欄位來表示小於 1 的數值。小數點的位置永遠不會移動!

最後快速複習

無號數 (Unsigned): 僅限正數。最大值 = \( 2^n - 1 \)。
二補數 (Two's Complement): 允許表示負數。最左側位元為負值。
算術: \( 1+1 = 0 \) 進位 1。減法其實就是加上一個負數。
定點數 (Fixed Point): 使用 0.5, 0.25 等欄位來表示分數。

你做得到!二進位是你將在電腦科學中學到的一切基礎。請持續練習這些轉換,它們很快就會變成你的直覺。