透過 MCP 連接 →

輸入計算

數學公式

廣告

結果

Two's Complement Binary (8-bit)
11111011
二補數表示法
無號值 251
有號值 -5
位元寬度 8 位元

什麼是二補數計算機?

二補數(Two's Complement)是電腦儲存有號整數的標準方式。這個計算機可以把任意十進位數字,依你選定的位元寬度(4、8、16 或 32 位元)轉換成二補數的二進位表示,並同時顯示這組位元被解讀為無號值(unsigned)與有號值(signed)時各自代表的數字。

使用方式

輸入一個十進位數字——正數或負數皆可——再選擇位元寬度即可。工具會將數字對 \(2^n\) 取模,產生出 CPU 實際會儲存的位元組合。它還會告訴你同一組位元解碼成有號值後會是多少,方便你來回驗證轉換是否正確。

公式說明

對一個 \(n\) 位元的欄位來說,無號表示法為

$$u = ((x \bmod 2^n) + 2^n) \bmod 2^n$$

這道公式會讓負數「繞回去」:以 8 位元為例,-5 會變成 \(256 - 5 = 251\),其二進位為 \(11111011\)。若要把一組位元解碼回有號值,只要檢查最高有效位元(MSB):若它為 1(也就是 \(u \geq 2^{n-1}\)),則該值為 \(u - 2^n\);否則就直接是 \(u\)。另一種等效的取負方法,是把所有位元取反後再加一:\(\sim x + 1\)。

$$\text{Unsigned} = \left(\,\text{Decimal} \bmod 2^{\text{Bits}}\,\right),\qquad \text{Signed} = \begin{cases} \text{Unsigned} & \text{Unsigned} < 2^{\,\text{Bits}-1} \\[4pt] \text{Unsigned} - 2^{\text{Bits}} & \text{otherwise} \end{cases}$$

Number line showing unsigned values wrapping into signed positive and negative ranges
Values at or above 2^(n-1) wrap to negative; the upper unsigned half maps to negative signed numbers.

實際範例

把 −5 轉換成 8 位元的二補數。步驟一:\(2^8 = 256\)。步驟二:\(u = ((-5 \bmod 256) + 256) \bmod 256 = 251\)。步驟三:\(251\) 的二進位是 \(11111011\)。由於 MSB 為 1,其有號值即為 \(251 - 256 = -5\),正好驗證了轉換結果。

Step diagram converting a negative decimal to two's complement binary
Two's complement of a negative value: invert the bits of the magnitude, then add one.

常見問題

如果我的數字超過位元寬度能容納的範圍怎麼辦? 它會對 \(2^n\) 取模並「繞回」(溢位),就跟硬體實際的行為一模一樣。例如 300 在 8 位元下會變成 \(300 - 256 = 44\)。

為什麼無號值和有號值不一樣? 同一組位元可以有兩種讀法。無號讀法把所有位元都當成正權重;有號讀法則把最高位元視為負權重。

支援 64 位元嗎? 為了讓結果維持在安全的精度範圍內,本工具目前支援到 32 位元等常見寬度。

最後更新: