本文轉載自張子秋博客,系統闡述機器數/真值概念、三碼定義與轉換、原碼減法失敗、反碼解決減法但引入 ±0、補碼完美修復並多表示一個最小值的演進邏輯,是理解計算機算術基礎的經典教材。
+3 → 00000011,-3 → 10000011(8 位)。10000011 真值 = -3,而非無符號值 131。| 值 | 原碼 | 反碼 | 補碼 |
|---|---|---|---|
| +1 | 0000 0001 | 0000 0001 | 0000 0001 |
| -1 | 1000 0001 | 1111 1110 | 1111 1111 |
規則:正數三碼同;負數原碼=符號位+絕對值;反碼=原碼符號位不變其餘取反;補碼=反碼+1。
1 - 1 = 1 + (-1) 原碼:[00000001] + [10000001] = [10000010] = -2 ❌
硬體若需識別符號位再決加減,電路極其複雜。
反碼:[00000001] + [11111110] = [11111111] = -0 ❌
真值正確,但 +0=[00000000]、-0=[10000000] 兩編碼浪費且邏輯不清。
補碼:[00000001] + [11111111] = [00000000] = 0 ✅
00000000 唯一表示 0。10000000 表示 -128(原/反碼無法表示)。-2147483648 對應補碼 0x80000000,無原/反碼表示。https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html
補碼基於模運算同餘原理,將減法轉為加法,解決符號位硬體複雜度與 ±0 編碼浪費,成為通用計算機算術標準。理解此演進過程,是掌握計算機組成原理的關鍵一步。