补码计算器

这是补码计算器。把有符号整数写成位型,或把 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。硬件减法用后一种,所以补码取代了反码和原码。