透過 MCP 連接 →

輸入計算

數學公式

廣告

結果

Two's Complement Binary (8-bit)
11111011
儲存的位元樣式
無號儲存值 251
有號數解讀 -5
二補數(取負) 5

什麼是二補數計算機?

二補數(Two's complement)是電腦用固定位元數表示有號整數的標準方式。這個計算機會接收一個十進位數字與 n 位元的暫存器寬度,接著顯示該數值如何以二補數位元樣式儲存、這些位元代表的無號值,以及這串位元被解讀為有號數時的意義。無論輸入正數或負數都適用。

如何使用

輸入你想編碼的十進位數值,並選擇位元數(常見為 8、16、32)。計算機會以模運算把數值收進 n 位元的暫存器中,顯示其二進位表示,並解碼出對應的有號數意義。負數會自動以二補數形式儲存。

公式說明

要把數值 \(x\) 儲存進 \(n\) 位元,可用下式計算儲存的(無號)位元樣式:

$$\text{stored} = \left(\left(x \bmod 2^{n}\right) + 2^{n}\right) \bmod 2^{n}$$

某個儲存值的二補數(取負運算)為 \(\text{twos} = \left(2^{n} - \text{stored}\right) \bmod 2^{n}\)。若要解碼一串 \(n\) 位元樣式的有號意義:當該樣式大於或等於 \(2^{n-1}\) 時,數值為 \(\text{pattern} - 2^{n}\)(負數);否則就是該樣式本身。

八位元二進位單元,最左側位元標記為負號權重
在二進位補數中,最高有效位帶有負權重,將取值範圍分為正數和負數。

實際範例

以 8 位元編碼 -5。此時 \(2^{8} = 256\),所以 \(\text{stored} = \left(\left(-5 \bmod 256\right) + 256\right) \bmod 256 = 251\)。換算成二進位,\(251 = 11111011\)。解碼 251:由於 \(251 \ge 2^{7}\)(128),其有號數值為 \(251 - 256 = -5\)。251 的二補數則為 \(\left(256 - 251\right) \bmod 256 = 5\),正好對應其絕對值。

三步圖示:原始位元、取反後的位元,然後加一以取負
要取負值,將每一位取反再加一。

常見問題

為什麼負數看起來像一大串二進位 1? 因為前導位元是 1;在 \(n\) 位元有號運算中,前導 1 代表這是負數,所以 11111011 表示 -5,而非 251。

n 位元能表示的範圍是多少? 有號數值範圍為 \(-2^{n-1}\) 到 \(2^{n-1} - 1\)。以 8 位元為例就是 -128 到 127。

如果我的數字太大怎麼辦? 超出暫存器範圍的數值會透過模運算繞回(溢位),運作方式與真實硬體完全一致。

最後更新: