二補數計算器

這是二補數計算器。把有號整數寫成位型,或把 hex / 二進位讀成有號數。8 位下 −1 是 0xFF,−52 是 0xCC。同一位元組 0xFF 無號是 255。

點格子翻轉這一位。最左邊(金圈)是符號位。

點一下即可複製

補齊、取反、加 1

二補數加減(A、B 填有號十進位)

示例,點色塊填入

同一 4 位型在無號、原碼、一補數、二補數下的讀法,點一列即可填入

Binary 無符號 原碼 一補數 Two's
00000000
01015555
01117777
10008−0−7−8
101010−2−5−6
111115−7−0−1

這是二補數計算器

把有號整數寫成二補數位型,或把 hex / 二進位位型讀成有號數。位寬可選自動、4、8、12、16、32、64。8 位下 −1 是 0xFF(1111 1111),−52 是 0xCC,20 是 0x14。同一組位還有無號讀法:0xFF 是 255。HEX、Binary、Decimal 這些識別字不翻譯。這不是 Hex 位元運算計算器,也不是無號的 Hex 計算器。

如何使用

  1. 選 Decimal / Hex / Binary 和位寬。十進位依有號整數寫出二補數。Hex、Binary 先依位寬左邊補 0,再讀有號值。自動會落到放得下的最小檔。
  2. 格子是位型。最左邊(金圈)是符號位,點格子可翻轉。卡片列出 hex、有號十進位、無號、一補數(每位取反)、以及取反加一得到的 −X。
  3. 負數十進位三步:絕對值補齊、取反、加 1。8 位 −52:0011 0100 → 1100 1011 → 1100 1100(0xCC)。正數不用取反加一。
  4. A、B 填同一位寬的有號十進位。A+B、A−B 依 2^N 回繞,數學和放不下會標溢位。顯示範例是 8 位 −1 → 0xFF。另外還有 −52、20、0xFF、0x80(−128)、4 位 1010(−6)。
  5. 4 位對照表比較無號、原碼、一補數、二補數。點一列填入該位型。

注意事項

位型公式是 TC = (2^N + X) mod 2^N。8 位有號 −128…127,4 位 −8…7。比位寬短的 hex/二進位是補 0,不是符號擴展。8 位 0x80 取負還是 0x80:這個寬度沒有 +128。相關:IEEE 754、位元組序轉換。

用在哪裡

  • dump 裡讀有號位元組:signed char 的 0xFF 是 −1,unsigned char 是 255。
  • 手算取反加一,或核對 A−B 就是 A 加上 B 的二補數。

常見問題

為什麼 8 位的 −128 不能取負?

範圍不對稱。1000 0000 取反加一還是 1000 0000。數學上的 +128 放不進去。

0xFF 到底是 −1 還是 255?

取決於怎麼讀。本頁會同時給出二補數有號值和同一組位的無號讀法。

這裡的一補數是什麼?

當前位型每一位取反,不加 1。負數寫成二補數才是絕對值取反再加 1。硬體減法用後一種,所以二補數取代了一補數和原碼。