二進位減法計算機:借位、二補數與完整範例解析
二進位減法計算機會算出兩個以 2 為底的數字之間的差,但若想親手算出相同的答案,就必須理解兩種不同的方法:直接借位法,它和你在紙上做十進位減法的方式如出一轍;以及二補數減法,這才是電腦硬體實際採用的做法。本指南會用完整範例逐一示範這兩種方法——包含一次跨越多個 0 的連鎖借位——每個答案都附上十進位驗算,並整理出最常導致二進位減法算錯的錯誤。
目錄
什麼是二進位減法?二進位減法計算機實際上在算什麼?
二進位減法是求兩個以 2 為底寫成的數字之間的差,只會用到 0 和 1 這兩個數字。二進位減法計算機套用的,正是你在十進位算術中已經熟悉的「借位再相減」邏輯,只是數字規則更少:0 − 0 = 0、1 − 0 = 1、1 − 1 = 0,以及 0 − 1 = 1 並向左邊下一欄借 1。 最後這條規則正是二進位借位減法容易出錯的地方,因為在 2 為底的系統中借位帶進當前欄的值是 2(而不是十進位的 10),而且一次借位可能會連續穿過好幾個為 0 的欄位,才找到可以借的 1。下面每一個範例都會一位一位地拆解這條借位鏈。
二進位減法規則:0−0=0、1−0=1、1−1=0,以及 0−1=1 並向下一欄借 1。
如何用直接借位法做二進位減法?
以下是一個完整的直接借位範例:計算 10110₂ 減去 01101₂,從右到左一次處理一欄,就像在紙上做十進位減法一樣。
1. 步驟 1 —— 對齊各欄
1 0 1 1 0 − 0 1 1 0 1 相減之前,先把兩個數字依最右邊(最低有效位)的數字對齊。
2. 步驟 2 —— 第 1 欄(最右):0 − 1
0 − 1 需要借位。向下一欄借 1,這一欄就變成 2 − 1 = 1。寫下 1,並標記下一欄欠一個借位。
3. 步驟 3 —— 第 2 欄:1 − 0,再扣掉借位
這一欄原本是 1 − 0,但它欠了步驟 2 的借位,所以變成 (1 − 1) − 0 = 0。寫下 0。
4. 步驟 4 —— 第 3 欄:1 − 1
1 − 1 = 0,而且這裡沒有欠任何借位。寫下 0。
5. 步驟 5 —— 第 4 欄:0 − 1
0 − 1 又需要一次借位。向最左邊那一欄借 1,這一欄就變成 2 − 1 = 1。寫下 1,並標記最左欄欠一個借位。
6. 步驟 6 —— 第 5 欄(最左):1 − 0,再扣掉借位
這一欄是 1 − 0,但它欠了步驟 5 的借位,所以變成 (1 − 1) − 0 = 0。寫下 0。
7. 步驟 7 —— 讀出結果並用十進位驗算
把步驟 6 到步驟 2 的數字依序讀出來:01001₂。用十進位檢查:10110₂ = 16+4+2 = 22,而 01101₂ = 8+4+1 = 13。22 − 13 = 9,而 01001₂ = 8+1 = 9——二進位與十進位的結果一致。
10110₂ − 01101₂ = 01001₂(十進位為 22 − 13 = 9)——兩次借位,已用十進位交叉驗算確認。
二進位減法中,借位如何連鎖穿越多個 0?
對二進位減法計算機來說,最難清楚呈現的情況就是連鎖借位:一次借位請求必須穿過好幾個為 0 的欄位,才能碰到一個 1。以下就是這種情境:計算 10000₂ 減去 00001₂。
1. 步驟 1 —— 對齊各欄
1 0 0 0 0 − 0 0 0 0 1 只有上方數字的最右欄需要借位,但附近沒有可以直接借的 1。
2. 步驟 2 —— 第 1 欄(最右):0 − 1 啟動連鎖
0 − 1 需要借位,但第 2 欄也是 0,所以借位請求傳遞到第 3 欄。第 3 欄同樣是 0,於是再傳到第 4 欄。第 4 欄也是 0,最後才傳到持有 1 的第 5 欄。
3. 步驟 3 —— 借位在第 5 欄解決,並一路回流
第 5 欄的 1 借出之後變成 0。這個借位讓第 4 欄從 0 變成 2,但第 4 欄同時也欠第 3 欄一個借位,所以它借出 1、自己留下 1(2 − 1 = 1),使第 4 欄 = 1。同樣的「借出並保留」模式在第 3 欄(變成 1)和第 2 欄(變成 1)重複出現,直到最初的借位終於落到第 1 欄。
4. 步驟 4 —— 第 1 欄拿到借位後完成計算
第 1 欄用這個從第 5 欄一路連鎖而來的借位,變成 2 − 1 = 1。寫下 1。
5. 步驟 5 —— 讀出結果並用十進位驗算
從第 5 欄讀到第 1 欄:01111₂。用十進位檢查:10000₂ = 16,而 00001₂ = 1。16 − 1 = 15,而 01111₂ = 8+4+2+1 = 15——結果一致。注意這個捷徑:從 2 的冪減去 1,一定會把所有尾端的 0 全部翻成 1,而這正是連鎖借位所產生的結果。
10000₂ − 00001₂ = 01111₂(十進位為 16 − 1 = 15)——單一次借位連鎖穿越四個為 0 的欄位才解決。
二補數減法如何運作?電腦為什麼要用它?
直接借位法用手算沒有問題,但電腦硬體並不會另外實作一組減法電路——它會透過二補數把減法轉換成加法,讓同一個二進位加法器同時處理兩種運算。要計算 A 減 B,硬體會算 A +(B 的二補數),然後捨棄超出所用位元數的溢位位元。
1. 步驟 1 —— 求出被減去那個數的二補數
先取減數的一補數(把每個位元翻轉),再加 1。這樣就得到該數字在二進位中的負值表示。
2. 步驟 2 —— 改用加法而不是減法
用一般的二進位加法規則,把被減數與步驟 1 得到的二補數相加。
3. 步驟 3 —— 若數字符合所選位元寬度,就捨棄溢位位元
如果相加後多出一個超過固定寬度的位元(例如處理 5 位元數字時出現第 6 個位元),就把它丟掉——那個溢位代表被吸收掉的借位,剩下的位元就是正確答案。
二補數減法:把減數的每個位元翻轉、加 1,再與被減數相加,最後捨棄任何溢位位元。
如何解一題二補數減法範例並驗算?
沿用第一個範例——10110₂ − 01101₂,使用 5 位元數字——來確認二補數減法會得到和直接借位法一樣的答案。
1. 步驟 1 —— 求 01101 的一補數
把 01101₂ 的每個位元翻轉:0→1、1→0、1→0、0→1、1→0,得到 10010₂。
2. 步驟 2 —— 加 1 得到二補數
10010₂ + 1 = 10011₂。這就是 01101₂ 在 5 位元下的二補數(負值)表示。
3. 步驟 3 —— 把被減數與二補數相加
10110₂ + 10011₂:逐欄相加並處理進位,得到 101001₂,因為兩個 5 位元數字相加,所以結果是 6 位元。
4. 步驟 4 —— 捨棄溢位位元
把 101001₂ 最左邊(第 6 個)的位元丟掉,剩下 01001₂ 就是 5 位元的答案。
5. 步驟 5 —— 比對並用十進位驗算
01001₂ 與先前直接借位法得到的結果完全相同。在十進位中,22 − 13 = 9,而 01001₂ = 8+1 = 9——兩種方法一致,確認二補數流程套用正確。
用二補數計算 10110₂ − 01101₂:10110 + 10011 = 101001 → 捨棄溢位 → 01001₂ = 9,與直接借位法一致。
做二進位減法時該避免哪些錯誤?
不論是手算還是拿計算機核對,大多數錯誤的二進位減法結果都出自少數幾種錯誤。
1. 錯誤 1 —— 把二進位借位當成十進位借位
在 2 為底的系統中,一次借位為當前欄加上 2,而不是 10。忘了這一點而套用十進位借位邏輯,就算借位方向正確,數字仍然會算錯。
2. 錯誤 2 —— 跨越多個 0 時弄丟連鎖借位
當借位必須穿過好幾個為 0 的欄位時(例如 10000₂ − 00001₂),很容易搞不清楚哪些欄位還欠著借位。請一次只處理一欄,並明確標記每一個被借走的欄位。
3. 錯誤 3 —— 二補數翻轉位元後忘了加 1
二補數需要先翻轉每個位元(一補數),然後再加 1。省略 +1 這一步只會停留在一補數,算出來的結果會和正確答案差 1。
4. 錯誤 4 —— 固定寬度二補數減法中保留了溢位位元
當兩個 n 位元數字相加得到 (n+1) 位元的和時,最左邊多出來的那個位元必須捨棄,才能得到正確的 n 位元答案——保留它會讓結果完全改變。
5. 錯誤 5 —— 略過十進位驗算
把兩個運算元和最終答案都轉成十進位只需要幾秒鐘,卻幾乎能立刻抓出所有減法失誤,因為只要有一個二進位數字算錯,換算成十進位的總和通常會明顯不對。
二進位借位為當前欄加上的是 2,而不是 10——這是二進位減法出錯最常見的單一原因。
練習題:你能解出這些二進位減法嗎?
先用直接借位法或二補數減法親手算過每一題,再對照答案。
1. 題目 1 —— 直接借位,單次借位
計算 1000₂ 減去 0011₂。答案:1000₂ − 0011₂ = 0101₂。十進位驗算:8 − 3 = 5,而 0101₂ = 4+1 = 5。
2. 題目 2 —— 二補數減法
用二補數計算 1010₂ 減去 0110₂。答案:0110₂ 的一補數是 1001₂,加 1 得到 1010₂。相加:1010₂ + 1010₂ = 10100₂;捨棄溢位位元後得到 0100₂。十進位驗算:10 − 6 = 4,而 0100₂ = 4。
3. 題目 3 —— 跨越三個 0 的連鎖借位
計算 100000₂ 減去 000001₂。答案:100000₂ − 000001₂ = 011111₂,因為借位連鎖穿過了四個為 0 的欄位。十進位驗算:32 − 1 = 31,而 011111₂ = 16+8+4+2+1 = 31。
這些題目歸根究柢都只有兩個動作:逐欄追蹤每一次借位,或轉成二補數再相加——然後一定要用十進位驗算確認。
二進位減法在真實運算中用在哪裡?
二進位減法不只是一道資訊科學練習題——它是從 CPU 算術到低階程式錯誤背後共同的運算基礎。處理器在其算術邏輯單元(ALU)中使用二補數減法,讓單一個加法器電路就能同時處理加法與減法,不需要為各自準備獨立硬體。記憶體位址計算、迴圈計數器,以及像 C 這類低階語言中的指標運算,在硬體層面全都可歸結為二進位減法。理解連鎖借位的模式,也能解釋一個經典的錯誤來源:無號整數下溢——減到超過 0 時,數值不會變成負數,而是繞回成一個非常大的數,因為硬體已經沒有可供連鎖的借位了。
每一次 CPU 減法——從迴圈計數器遞減到記憶體位址計算——底層其實都是二補數加法。
Solvify 如何幫你驗證二進位減法計算機的結果?
當你透過本指南掌握了直接借位法與二補數減法之後,Solvify 的 AI 解題工具可以拍下一題二進位算術題目——不論來自資訊科學作業、離散數學習題或數位邏輯考前複習——並帶你走過同樣的逐欄運算與補數步驟,讓你把它的解法和自己手算的結果相互對照,在作業被評分之前就抓出借位或位元翻轉的失誤。
培養二進位減法信心最快的方式,是先親手算完一題,再用計算機來驗證它——而不是反過來。
相關文章
相關數學解題工具
智慧掃描解題
拍下任何一題二進位算術問題,立刻取得逐步解析。
逐步解題
取得每一次借位與二補數步驟的詳細說明,而不只是最終答案。
AI 數學家教
針對借位、二補數或計算中的任何一步繼續追問,直到完全弄懂為止。
