定義

  • 原碼:符號位加上真值的絕對值(即:最高位為符號位,0正1負,其餘位為數值)。
  • 反碼
  • 正數:與原碼相同。
  • 負數:符號位不變,其餘各位(數值位)按位取反。
  • 補碼
  • 正數:與原碼相同。
  • 負數在反碼的最低位加 1

例子

假設字長為 4 位:

1. 正數(例如 +2)

  • 原碼: 0010
  • 反碼: 0010(正數不變,千萬不要取反
  • 補碼: 0010(正數不變,也不要加 1

2. 負數(例如 -2)

  • 原碼: 1010(最高位變1,表示負)
  • 反碼: 1101(符號位 1 不動,後面的 010 變成 101
  • 補碼: 1110(反碼 1101 + 1 = 1110

二進制補碼計算方法

計算補碼錶示的數值大小時,最關鍵的是首先看最高位(最左邊第一位)

核心步驟

  1. 看最高位(符號位):
  • 如果是 0:表示正數。直接算。
  • 如果是 1:表示負數。需要“取反加一”求出絕對值,最後加負號。
  1. 負數的計算公式:
  • 步驟: 先把每一位取反(0變1,1變0),然後結果加 1。算出這個新數的十進制大小,就是該負數的絕對值。

例子 1:正數的情況(最簡單)

假設字長為 8 位,二進制補碼:0000 1101

  1. 檢查符號位: 最高位是 0,這是正數。
  2. 直接計算:
  • 對應位權值相加:8 + 4 + 1 = 13
  • (第3位是1,代表8;第2位是1,代表4;第0位是1,代表1)
  1. 結果: +13

例子 2:負數的情況(經典例子)

假設字長為 8 位,二進制補碼:1111 0101

  1. 檢查符號位: 最高位是 1,這是負數。
  2. 求絕對值(取反加一):
  • 第一步(取反):1111 0101 每一位反過來 → 變成 0000 1010
  • 第二步(加一): 0000 1010 + 1 → 變成 0000 1011
  1. 計算大小:
  • 0000 1011 換算成十進制:8 + 2 + 1 = 11
  1. 加上負號:
  • 結果是 -11

例子 3:位數較少的負數

假設字長為 4 位,二進制補碼:1110

  1. 檢查符號位: 最高位 1,是負數。
  2. 求絕對值:
  • 取反: 1110 → 變成 0001
  • 加一: 0001 + 1 → 變成 0010
  1. 計算大小:
  • 0010 是十進制的 2。
  1. 結果: -2

例子 4:特殊的最小負數

假設字長為 8 位,二進制補碼:1000 0000

  1. 檢查符號位: 最高位 1,是負數。
  2. 特殊情況:
  • 按照規則取反得到 0111 1111,加 1 後變成 1000 0000(也就是128)。
  • 這是補碼的特殊規定:1 後面全 0,表示該位寬能容納的最小負數。
  1. 結果: -128