透過 MCP 連接 →

輸入計算

數學公式

廣告

結果

一補數
250
111110102 (8-bit)
原始值(十進位) 5
原始值(二進位) 00000101
一補數(二進位) 11111010
一補數(十進位) 250
位元寬度 8

什麼是一補數?

一個二進位數的一補數,就是把每個位元都反轉(flip):0 變成 1、1 變成 0。由於結果會隨著使用的位元數而不同,因此必須先指定位元寬度,例如 4、8、16 或 32 位元。早期電腦曾用這種表示法來編碼帶正負號的整數,而在學習二進位運算與錯誤偵測校驗碼(checksum)時,它至今仍十分重要。

八位元二進位值,每一位都被翻轉以產生其一補數
一補數會翻轉所選位元寬度內的每一位。

如何使用這個計算機

輸入一個非負的十進位數字並選擇位元寬度,計算機會先把數字遮罩(mask)到該寬度,接著反轉所有位元,最後同時顯示結果的二進位與十進位形式。如果你輸入的數字超出該寬度可容納的範圍,系統會在反轉之前只保留寬度內最低位的位元。

公式解析

計算式為 $$\text{ones} = (\sim n) \,\&\, (2^w - 1)$$。其中 \(2^w - 1\) 是一個由 w 個 1 組成的遮罩(以 8 位元為例就是 \(11111111 = 255\))。位元 NOT 運算(\(\sim\))會反轉 n 的每個位元,而遮罩則會捨棄超出所選寬度的位元,讓答案維持在有效範圍內。

4、8、16 與 32 個單元的四條位元寬度條帶,依長度遞增顯示
位元寬度決定翻轉多少位。

實例演算

以 8 位元的數字 5 為例。在二進位中,\(5 = 00000101\),把每個位元反轉後得到 \(11111010\),換算成十進位等於 250。因此 5 在 8 位元下的一補數為 250。若改用 4 位元,\(5 = 0101\),反轉後為 \(1010 = 10\)。

常見問題

一補數和二補數有什麼不同?二補數是在一補數的基礎上再加 1,如此可避免「零」出現兩種不同的表示方式。

0 的一補數是多少?在 8 位元下為 \(11111111 = 255\),也就是所有位元全部變成 1。

為什麼答案會隨位元寬度改變?反轉位元的結果取決於有多少個位元;寬度越大,前面補上的 1 越多,算出的十進位數值也就越大。

最後更新: