透過 MCP 連接 →

輸入計算

數學公式

廣告

結果

二補數
01001011
輸入類型 decimal
原始輸入 181
位元寬度 8 位元
二進位表示法 10110101
一補數 01001010
二補數 01001011
原始十進位(無號) 181
原始十進位(有號) -75
二補數十進位 75
原始十六進位 0xB5
有號十六進位 0xB5
二補數十六進位 0x4B

什麼是二補數計算機?

二補數計算機可在十進位、二進位與十六進位之間互相轉換,同時呈現電腦內部是如何表示負數的。二補數(Two's Complement)是現今幾乎所有處理器用來儲存有號整數的標準方法,因此無論是程式設計師、電子工程系學生,或任何接觸數位邏輯的人,都有必要徹底搞懂它。這款工具讓你以任何進位制輸入數值,挑選位元寬度(8、16 或 32 位元),就能即時看到二補數的表示法以及對應的十進位值。

計算機怎麼用?

  • 在輸入欄位中填入你的數字——支援十進位、二進位或十六進位。
  • 視需要選擇輸入值的進位制。
  • 選定位元寬度:8 位元、16 位元或 32 位元。
  • 查看結果:二進位、十六進位與有號十進位值會自動顯示出來。

位元寬度之所以重要,是因為它決定了可儲存的數值範圍。舉例來說,8 位元有號整數可表示 -128 到 127;16 位元則涵蓋 -32,768 到 32,767。

公式解析

要求出一個二進位數的二補數,只需兩個步驟:

  • 把每個位元反相(0 變成 1,1 變成 0),這就是一補數(One's Complement)。
  • 在結果上加 1

最左邊的位元扮演符號位的角色:0 代表正數,1 代表負數。若要把負的十進位數轉成二補數,公式為 \(2^{n} + \text{數值}\),其中 \(n\) 為位元寬度。

$$\text{Twos Complement} = \left(\sim \text{Number}_{\,2}\right) + 1 \pmod{2^{\text{Bit Width}}}$$
Advertisement
兩步圖示:先取反各位元,再加一得到補數
補數的求法是先將每一位元取反,再加 1。

實際範例

把 -5 轉換成 8 位元二補數:

  • 先寫出 +5 的二進位:0000 0101
  • 將各位元反相:1111 1010
  • 加 1:1111 1011

因此 -5 會被儲存成 1111 1011,換算成十六進位即 FB。驗算一下:\(251 - 256 = -5\)(無號值)。

圓形圖示,展示有號 8 位元範圍從正數回繞到負數
有號 8 位元值會回繞,將高半部分對應為負數。

按位寬分類的有符號整數範圍

二補數是電腦表示有符號整數的標準方式。對於給定的位寬 \(n\),一個位元用作符號位元,因此可表示的有符號範圍是 \(-2^{n-1}\) 到 \(2^{n-1}-1\),而相同位元的無符號解釋涵蓋 \(0\) 到 \(2^{n}-1\)。所有算術運算都以模 \(2^{n}\) 進行換行。

位寬 \(n\) 有符號最小值 \(-2^{n-1}\) 有符號最大值 \(2^{n-1}-1\) 無符號最大值 \(2^{n}-1\) 模數 \(2^{n}\)
8 -128 127 255 256
16 -32,768 32,767 65,535 65,536
32 -2,147,483,648 2,147,483,647 4,294,967,295 4,294,967,296
64 -9,223,372,036,854,775,808 9,223,372,036,854,775,807 18,446,744,073,709,551,615 18,446,744,073,709,551,616

例如,十進位 5 在 8 位元形式中的二補數是 251(當作無符號位元組讀取時),它表示有符號值 \(-5\)。

常見 8 位元值的十進位-二進位-十六進位參考表

下表將代表性的有符號十進位值對應到其 8 位元二補數二進位和十六進位形式。負數的最高有效位設為 1。若要對值進行否定,請反轉所有 8 個位元並加 1。

有符號十進位 8 位元二進位 十六進位 無符號值
-128 1000 0000 0x80 128
-64 1100 0000 0xC0 192
-5 1111 1011 0xFB 251
-1 1111 1111 0xFF 255
0 0000 0000 0x00 0
1 0000 0001 0x01 1
5 0000 0101 0x05 5
64 0100 0000 0x40 64
127 0111 1111 0x7F 127

若要獨立驗證二進位形式,您可以將 8 位元模式 11111011 轉換回十進位,作為無符號位元組等於 251(解釋為有符號時為 \(-5\))。

Advertisement

關鍵術語與定義

位寬
用於儲存整數的二進位數字個數(通常為 8、16、32 或 64)。它確定了模數 \(2^{n}\) 和可表示值的範圍。
符號位元
指示有符號數是負數(1)還是非負數(0)的單一位元。在二補數中,它是最高有效位。
最高有效位(MSB)
二進位數中最左邊、最高值的位元。在有符號二補數值中,MSB 兼作符號位元。
一補數
數字的按位反轉 — 每個 0 變成 1,每個 1 變成 0(\(\overline{B}\))。它是形成二補數前加 1 的中間步驟。
二補數
主要的有符號整數編碼:通過反轉所有位元並加 1 來否定值,即 \(\overline{B}+1 \pmod{2^{n}}\)。它給出零的單一表示法,並讓相同的硬體執行有符號和無符號數的加法。
溢位/換行
當結果超過位寬的可表示範圍時發生的情況;該值以模 \(2^{n}\) 進行換行。例如,將 8 位元最大值 127 加 1 會換行為 -128。
有符號與無符號整數
有符號整數可以使用二補數表示負數(範圍 \(-2^{n-1}\) 到 \(2^{n-1}-1\));無符號整數將每個位元模式視為非負數(範圍 \(0\) 到 \(2^{n}-1\))。位元相同 — 只有解釋方式不同。

常見問題

為什麼電腦要使用二補數?因為加法與減法可以共用同一套電路,而且零只有一種表示方式,不像符號數值法(sign-magnitude)或一補數那樣會出現兩種零。

如果我的數字超出位元寬度會怎樣?數值會溢位(overflow)並繞回(wrap around),產生出乎意料的結果。改用更寬的位元寬度即可避免這種情況。

怎麼轉換回一般的十進位?如果符號位是 1,就再取一次二補數並加上負號;如果符號位是 0,直接當成一般的二進位數來讀即可。

最後更新: