A - B = A + (-B))。參考:為什麼選補碼
00000000 (0) ~ 01111111 (127)。
正數補碼 = 真值二進制。
模 M = 2^8 = 256。負數 -x 的補碼 = M - x。
-1 → 255 → 11111111
-127 → 129 → 10000001
-128 → 128 → 10000000
範圍:-128 ~ -1(比原碼/反碼多表示 -128)。
正數:直接寫二進制。
負數 -x:計算 256 - x,寫二進制。
例:-126 → 256-126=130 → 10000010。
補碼值 C(作為無號數讀取):
若符號位 0 → 真值 = C。
若符號位 1 → 真值 = C - 256。
例:10000010 (130) → 130 - 256 = -126。
10000000 (128) → 128 - 256 = -128。
對 -128:
真值 -128 無原碼表示(8 位原碼範圍 -127~127)。
強行取反加一會丟失進位,得到 10000000,雖結果正確但邏輯不通。
同余定義才是本質,取反加一只是 M=2^n 時的計算技巧。
| 真值 | 補碼(二進制) | 無號解讀 | 補碼→真值計算 |
|---|---|---|---|
| 0 | 00000000 | 0 | 0 |
| 127 | 01111111 | 127 | 127 |
| -1 | 11111111 | 255 | 255-256=-1 |
| -127 | 10000001 | 129 | 129-256=-127 |
| -128 | 10000000 | 128 | 128-256=-128 |
-x 對應 2^n - x。