「補數法」(Complement Method)是電腦內部執行減法的核心技術。簡單來說,電腦為了節省硬體成本,不專門設計「減法器」,而是將所有的減法運算( A−B )轉換成加法運算( A+[−B] )。
二的補數(Two’s Complement)是電腦(例如 CPU)中表示負數的核心方法,幾乎所有現代系統都用它來統一「加法與減法」。在二進制系統中,我們使用的是「二補數」(Two's Complement)。以下拆解具體的操作步驟與原理。
一、什麼是二補數?
👉 定義很簡單:
二補數 = 先取反(0↔1),再加 1
二、為什麼要用二補數?
在電腦裡,如果用一般方式表示負數,會遇到問題:
- +3 和 -3 需要不同運算邏輯
- 加法器和減法器要分開設計(硬體變複雜)
👉 二補數的目的:
讓減法變成加法
這樣硬體只需要「加法器」就夠了。
🛠️ 補數法操作三部曲
假設我們要計算 A−BA−B ,電腦實際執行的步驟如下:
- 保持被減數 ( AA ) 不變。
- 將減數 ( BB ) 轉換為「二補數」(這代表變成了 −B−B )。
- 口訣:「按位取反,末位加一」
3. 將兩者相加。
- 注意:如果最高位產生進位(溢出),直接捨棄。
三、如何求一個數的二補數?
我們用 4-bit(4位元)來示範:
範例:求 -5
Step 1:寫出 +5
5 = 0101
Step 2:取反(1的補數)
0101 → 1010
Step 3:加 1(變成二的補數)
1010 + 1 = 1011
👉 所以:
-5 = 1011(4-bit)
四、驗證:用加法算 5 + (-5)
0101 (+5)
+ 1011 (-5)
-------
10000
👉 丟掉最高位(溢位):
0000 => 0
✔ 完美成立!
五、快速判斷正負
在二補數系統中:
最左位(MSB)代表0正數1負數
例如:
0101 → +5
1011 → -5
六、如何把負數「轉回十進制」?
例如:
1011(4-bit)
Step 1:取反
1011 → 0100
Step 2:加 1
0100 + 1 = 0101 = 5
👉 所以原數是:
-5
七、範圍(非常重要)
n-bit 二補數的範圍:
-2(n-1) ~ +2(n-1)-1
-2^(n-1) ~ +2^(n-1)-1
例:4-bit
-8 ~ +7

八、為什麼「取反+1」這麼神奇?
核心原因是:
👉 二的補數其實是在做:2n - x
2^n - x
例如(4-bit):24 = 16
2^4 = 16
16 - 5 = 11 → 1011
二的補數 1011 代表 -5
👉 這正好就是 -5 的表示
九、二補數的關鍵優點
1️⃣ 加減法統一
A - B = A + (-B)
2️⃣ 只有一個 0(沒有 +0 / -0 問題)
3️⃣ 硬體簡單(CPU 設計核心原因)
十、再看一個完整例子
計算:7 - 3
7 = 0111
3 = 0011
Step 1:求 -3
0011 → 1100 → +1 → 1101
Step 2:相加
0111 (這是 7)
+1101 (這是 -3 的補數)
------
10100
處理進位
- 運算結果產生了 5 個位元
10100。 - 因為我們設定的是 4位元系統,所以最高位的 1 會溢出(Overflow)。
- 捨棄最高位的進位,剩下的就是
0100。
結果驗證:
二進制 0100 轉換為十進制正是 4。運算成功!
✔ 正確!
🧠 為什麼要這樣做?(原理與優勢)
你可能會問:「直接減不是比較直觀嗎?為什麼要繞一圈取反加一?」這主要有三個關鍵原因:
- 硬體設計極簡化
如果不使用補數法,電路工程師需要設計兩套電路:一套加法器、一套減法器。使用補數法後,只需要一個加法器就能處理所有加減運算,大幅降低了晶片製造的複雜度與成本。 - 符號位統一處理
在補數法中,符號位(最高位)可以直接參與運算,不需要額外的邏輯去判斷正負號。
- 符號位為 0:代表正數。
- 符號位為 1:代表負數
- 解決「負零」的問題
在舊式的「一補數」(僅取反不加一)系統中,會有+0(0000) 和-0(1111) 兩種零的表示法,造成混亂。二補數法確保了 0 只有一種表示方式 (0000),讓編碼更有效率。
💡 快速記憶表
- 操作 動作 範例 (4位元)
- 正數 保持原樣 3→0011
- 變負數 取反加一 3→ 取反
1100→ 加11101 - 變回正數 再取反加一 −3 (
1101) → 取反0010→ 加10011(3)





















