二補數計算機

位元數
十進位
二補數(8 位元)
0
符號
0
0
0
4
0
0
0
0
0
可表示範圍 -128 ~ 127

二補數是什麼?計算方法與 JavaScript 範例

二補數(two's complement)是電腦用固定長度位元表示有號整數的方法。這篇說明它的計算步驟,並附上可直接執行的 JavaScript 範例。

什麼是二補數?

n 位元的二補數表示法中,可表示的範圍是 -2^(n-1)2^(n-1)-1。最高位是符號位:0 代表正數,1 代表負數。用二補數表示負數後,加法器不需要特別處理減法,同一套電路就能算加減。

計算二補數的方法

計算一個負數的二補數表示:

  1. 先寫出對應正數的二進位形式。
  2. 逐位反轉:0 變 1、1 變 0(一補數)。
  3. 再加上 1。

舉例來說,用 8 位元計算 -5 的二補數表示:

  1. 先寫出 +5 的二進位形式:00000101。
  2. 逐位反轉,得到 11111010。
  3. 加上 1,得到 11111011,這就是 -5 的二補數表示。

使用 JavaScript 計算二補數的範例程式

// 以指定位元數計算二補數表示
function toTwosComplement(value, bits = 8) {
  return BigInt.asUintN(bits, BigInt(value)).toString(2).padStart(bits, "0");
}

console.log(toTwosComplement(-5)); // "11111011"
console.log(toTwosComplement(5)); // "00000101"

BigInt.asUintN 會把數值截斷成 bits 位元的無號整數,剛好就是二補數的位元排列,再轉成二進位字串即可。

常見錯誤

  • 忘記加 1: 只做逐位反轉得到的是一補數,還要再加 1 才是二補數。
  • 位元數不夠: n 位元只能表示 -2^(n-1)2^(n-1)-1。超出範圍會溢位,本頁上方的計算機會直接提示。

結論

二補數讓電腦用同一套加法電路處理正負數運算。理解「反轉再加一」與表示範圍,就足以應付大多數作業與除錯情境;需要驗算時,直接用上方的計算機輸入十進位數字與位元數即可。


相關工具地址中翻英與 3+3 郵遞區號查詢——輸入台灣中文地址,批量取得中華郵政格式英譯與六碼郵遞區號。