歡迎學習二進制加法!
你有沒有想過電腦是如何做運算的?在電腦內部,有數以十億計微小的電子開關,它們只能處於開啟(ON)或關閉(OFF)的狀態。正因如此,電腦無法像人類一樣使用 \(0\) 到 \(9\) 的數字來計數。相反,它們使用一種稱為二進制(Binary)的系統。在這些筆記中,你將會學到電腦如何僅僅利用兩個數字:\(0\) 和 \(1\) 來進行加法運算!
剛開始覺得有點複雜?不用擔心!只要掌握了基本法則,二進制加法的原理其實就跟你平常在數學課學到的直式加法一模一樣。
1. 快速溫習:數據單位與數制
在開始學習加法之前,讓我們先複習一些重要概念:
• 十進制(Denary / Decimal):這是人類日常使用的「以 10 為基數」的數制系統。它包含十個數字:\(0, 1, 2, 3, 4, 5, 6, 7, 8,\) 和 \(9\)。
• 二進制(Binary):這是電腦使用的「以 2 為基數」的數制系統。它只使用兩個數字:\(0\) 和 \(1\)。
• 位元(Bit):單一個二進制數字(即單獨一個 \(0\) 或 \(1\))。它是電腦運算中最基本的數據單位。
• 半字節(Nibble):一組由 \(4\) 個位元(bits)組成的數據(例如:\(1010\))。
• 字節(Byte):一組由 \(8\) 個位元(bits)組成的數據(例如:\(11001010\))。
二進制的位值(Place Values)
在標準的十進制數學中,各數位的值向左每移一位就會乘以 \(10\)(\(1, 10, 100, 1000\))。而在二進制中,位值向左每移一位就會倍增(即 \(2\) 的次方):
\(128\) | \(64\) | \(32\) | \(16\) | \(8\) | \(4\) | \(2\) | \(1\)
你知道嗎? 使用一個 8-bit 字節所能表示的最大數值是 \(255\)(即 \(2^8 - 1\),亦即所有 8 個位元全部為 \(11111111\))。
重點歸納:二進制是以 2 為基數的系統(只有 \(0\) 和 \(1\))。\(1\) 字節(byte)= \(8\) 位元(bits),其位值由右至左倍增:\(1, 2, 4, 8, 16, 32, 64, 128\)。
2. 二進制加法的五大黃金法則
要計算任何二進制加法,你只需要記住以下五條簡單法則。把它們當成一套密碼規則吧:
法則 1: \(0 + 0 = 0\)
(零加零等於零)
法則 2: \(0 + 1 = 1\)
(零加一等於一)
法則 3: \(1 + 0 = 1\)
(一加零等於一)
法則 4: \(1 + 1 = 10\)
(在二進制中,\(1 + 1\) 等於 \(2\),寫成 \(10\)。你在該列寫下 \(0\),並向左邊下一列進位 \(1\)。)
法則 5: \(1 + 1 + 1 = 11\)
(當前一列有進位時便會出現這種情況!在二進制中,\(1 + 1 + 1\) 等於 \(3\),寫成 \(11\)。你在該列寫下 \(1\),並向左邊下一列進位 \(1\)。)
記憶小技巧
• 十進制中:\(1 + 1 = 2\)。在二進制中,數字 \(2\) 寫成 \(10\)(代表一個 2 和零個 1)。
• 十進制中:\(1 + 1 + 1 = 3\)。在二進制中,數字 \(3\) 寫成 \(11\)(代表一個 2 和一個 1)。
重點歸納:切勿在二進制答案中寫出數字「\(2\)」或「\(3\)」!請永遠只寫下「\(0\)」或「\(1\)」,並把其餘的進位。
3. 逐步直式加法運算
就像平常的數學一樣,我們會使用直式加法。計算時請務必遵循以下兩個重要步驟:
1. 對齊各數位的位值。
2. 永遠由最右邊的最低有效位(LSB)開始相加,並逐步向左計算。
計算範例 1:簡單的 4-bit 加法
讓我們計算 \(0101\)(十進制的 \(5\))加上 \(0010\)(十進制的 \(2\)):
\(0\) \(1\) \(0\) \(1\)
+ \(0\) \(0\) \(1\) \(0\)
-----------------
• 第 1 列(最右邊,位值 1 的列):\(1 + 0 = 1\)
• 第 2 列(位值 2 的列):\(0 + 1 = 1\)
• 第 3 列(位值 4 的列):\(1 + 0 = 1\)
• 第 4 列(位值 8 的列):\(0 + 0 = 0\)
答案: \(0111\)(十進制的 \(7\))。
計算範例 2:包含進位的加法
讓我們計算 \(0110\)(十進制的 \(6\))加上 \(0111\)(十進制的 \(7\)):
\(0\) \(1\) \(1\) \(0\)
+ \(0\) \(1\) \(1\) \(1\)
-----------------
• 第 1 列(最右邊): \(0 + 1 = 1\)。寫下 \(1\)。
• 第 2 列: \(1 + 1 = 10\)。寫下 \(0\),向下一列進位 \(1\)。
• 第 3 列: \(1 + 1 + 1\)(包含進位)\(= 11\)。寫下 \(1\),向下一列進位 \(1\)。
• 第 4 列: \(0 + 0 + 1\)(進位)\(= 1\)。寫下 \(1\)。
答案: \(1101\)(相等於十進制的 \(8 + 4 + 1 = 13\))。
重點歸納:由最右邊開始計算。每當遇到 \(1 + 1\) 時,寫下 \(0\) 並進位 \(1\);遇到 \(1 + 1 + 1\) 時,寫下 \(1\) 並進位 \(1\)。
4. 8-bit 加法與溢位錯誤(Overflow Errors)
在初中電腦科中,你經常會處理 8-bit 二進制數字(即最多一個字節)。但如果計算出來的答案太大,超出 \(8\) 個位元所能容納的範圍,會發生甚麼事呢?
甚麼是溢位錯誤?
當加法運算的結果大於預先分配的位元數所能儲存的最大數值時,便會發生溢位錯誤(Overflow Error)。
對於一個 8-bit 的字節而言:
• 最大數值為 \(255\)(即 \(2^8 - 1\))。
• 如果你把兩個 8-bit 數字相加,而總和需要 第 9 個位元 來表示,電腦便會因為沒有足夠空間儲存該額外的進位位元而產生錯誤。
生活化比喻
想像一個只能顯示 \(3\) 個數字的電子計分板或汽車里程表。如果數字達到 \(999\) 時再加 \(1\),顯示器可能會重置並顯示為 \(000\)!進位的「\(1\)」就像「掉出邊界」一樣,因為根本沒有位置去存放它。
溢位錯誤帶來的後果
當 8-bit 運算中發生溢位錯誤時:
• 最左邊進位的第 9 個位元會遺失或被忽略。
• 剩下的 8 個位元會得出一個完全錯誤的結果。
• 這可能會導致電腦軟件出現程式錯誤(bugs)甚至系統崩潰!
重點歸納:當計算結果所需的位元數超出了電腦所分配的位元大小時(例如 8-bit 的計算產生了第 9 個位元),便會產生溢位。
5. 學生常犯錯誤
練習二進制加法時,要特別留意以下常見錯誤:
• 十進制思維誤區:在某一列直接寫上數字「\(2\)」。請記住,二進制中不存在數字「\(2\)」!永遠要寫下「\(0\)」並進位「\(1\)」。
• 忽略進位:忘記將進位的「\(1\)」加到左邊的下一列。請務必在列的上方或下方清晰標註進位。
• 混淆位值:誤以為二進制的位值像十進制一樣是 \(1, 10, 100\)。切記二進制的位值是倍增的:\(1, 2, 4, 8, 16, 32, 64, 128\)。
• 誤解溢位概念:誤以為溢位只是單純指「一個很大的數字」。溢位是一個特定的錯誤,指的是電腦缺乏足夠的儲存位元來容納最終的總和。
6. 章節溫習清單
在進入下一課之前,請確保你能夠對以下各項說「是」:
✔ 你知道二進制是以 2 為基數(\(0\) 和 \(1\)),而十進制是以 10 為基數(\(0\) 到 \(9\))嗎?
✔ 你能說出位元/bit(\(1\) 位)、半字節/nibble(\(4\) bits)及字節/byte(\(8\) bits)的大小嗎?
✔ 你能熟背所有 \(5\) 條加法法則,包括 \(1 + 1 = 10\) 和 \(1 + 1 + 1 = 11\) 嗎?
✔ 你是否永遠由最右邊的最低有效位(LSB)開始相加?
✔ 你能解釋甚麼是溢位錯誤,以及為甚麼在 8-bit 加法中第 9 個位元會遺失嗎?