二補數是什麼?計算方法與 JavaScript 範例
二補數(two's complement)是電腦用固定長度位元表示有號整數的方法。這篇說明它的計算步驟,並附上可直接執行的 JavaScript 範例。
什麼是二補數?
在 n 位元的二補數表示法中,可表示的範圍是 -2^(n-1) 到 2^(n-1)-1。最高位是符號位:0 代表正數,1 代表負數。用二補數表示負數後,加法器不需要特別處理減法,同一套電路就能算加減。
計算二補數的方法
計算一個負數的二補數表示:
- 先寫出對應正數的二進位形式。
- 逐位反轉:0 變 1、1 變 0(一補數)。
- 再加上 1。
舉例來說,用 8 位元計算 -5 的二補數表示:
- 先寫出 +5 的二進位形式:00000101。
- 逐位反轉,得到 11111010。
- 加上 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 郵遞區號查詢——輸入台灣中文地址,批量取得中華郵政格式英譯與六碼郵遞區號。