定義
- 原碼:符號位加上真值的絕對值(即:最高位為符號位,0正1負,其餘位為數值)。
- 反碼:
- 正數:與原碼相同。
- 負數:符號位不變,其餘各位(數值位)按位取反。
- 補碼:
- 正數:與原碼相同。
- 負數:在反碼的最低位加 1。
例子
假設字長為 4 位:
1. 正數(例如 +2)
- 原碼:
0010 - 反碼:
0010(正數不變,千萬不要取反) - 補碼:
0010(正數不變,也不要加 1)
2. 負數(例如 -2)
- 原碼:
1010(最高位變1,表示負) - 反碼:
1101(符號位1不動,後面的010變成101) - 補碼:
1110(反碼1101+1=1110)
二進制補碼計算方法
計算補碼錶示的數值大小時,最關鍵的是首先看最高位(最左邊第一位)。
核心步驟
- 看最高位(符號位):
- 如果是 0:表示正數。直接算。
- 如果是 1:表示負數。需要“取反加一”求出絕對值,最後加負號。
- 負數的計算公式:
- 步驟: 先把每一位取反(0變1,1變0),然後結果加 1。算出這個新數的十進制大小,就是該負數的絕對值。
例子 1:正數的情況(最簡單)
假設字長為 8 位,二進制補碼:0000 1101
- 檢查符號位: 最高位是
0,這是正數。 - 直接計算:
- 對應位權值相加:8 + 4 + 1 = 13
- (第3位是1,代表8;第2位是1,代表4;第0位是1,代表1)
- 結果: +13
例子 2:負數的情況(經典例子)
假設字長為 8 位,二進制補碼:1111 0101
- 檢查符號位: 最高位是
1,這是負數。 - 求絕對值(取反加一):
- 第一步(取反): 將
1111 0101每一位反過來 → 變成0000 1010 - 第二步(加一):
0000 1010+1→ 變成0000 1011
- 計算大小:
0000 1011換算成十進制:8 + 2 + 1 = 11
- 加上負號:
- 結果是 -11
例子 3:位數較少的負數
假設字長為 4 位,二進制補碼:1110
- 檢查符號位: 最高位
1,是負數。 - 求絕對值:
- 取反:
1110→ 變成0001 - 加一:
0001+1→ 變成0010
- 計算大小:
0010是十進制的 2。
- 結果: -2
例子 4:特殊的最小負數
假設字長為 8 位,二進制補碼:1000 0000
- 檢查符號位: 最高位
1,是負數。 - 特殊情況:
- 按照規則取反得到
0111 1111,加 1 後變成1000 0000(也就是128)。 - 這是補碼的特殊規定:
1後面全0,表示該位寬能容納的最小負數。
- 結果: -128
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。