原码反码补码转换器

快速示例:
原码
反码
补码

十进制

本工具把十进制整数转成指定位数的原码、反码、补码,也可以从位串反推十进制真值。最高位是符号位:0 表示正,1 表示负。仅处理整数。

如何使用

  1. 十进制 → 原反补:选择 8 / 16 / 32 位,输入整数后点转换。结果按 4 位分组,并给出十六进制。
  2. 原反补 → 十进制:选择位数和编码类型,粘贴 0、1 组成的位串(可含空格)。位数必须正好等于机器位数。

表示范围

n 位时,数值位有 n−1 位。

−128(8 位)、−32768(16 位)、−2147483648(32 位)只有补码能表示:1 后面全是 0。原码、反码会显示无法表示。

编码规则

原码

符号位加上绝对值的二进制。正数符号位为 0,负数符号位为 1。例如 8 位时 5 是 00000101,−5 是 10000101。

反码

正数的反码等于原码。负数:符号位不变,其余各位取反。例如 −5 的 8 位反码是 11111010。

补码

正数的补码等于原码。负数:在反码基础上加 1。例如 −5 的 8 位补码是 11111011。现代计算机用补码做加减,这样加法和减法可用同一套电路,且 0 只有一种编码。

+0 和 −0

原码和反码里,全 0 是 +0;原码 1 后跟全 0、反码 1 后跟全 1 是 −0。补码把 −0 的反码再加 1 后溢出成全 0,因此补码只有一种 0。

机器数和真值

机器数是计算机里带符号位的二进制形式。真值是它对应的实际数值,用正负号写出,例如机器数 10000101(8 位原码)的真值是 −5。

常见问题

为什么 −128 没有原码?

8 位原码要用 7 位表示绝对值,最大绝对值是 127。128 需要第 8 个数值位,和符号位冲突,所以 8 位原码表示不了 −128,补码可以。

补码怎么还原成十进制?

最高位为 0 时,按无符号二进制读。最高位为 1 时,无符号值减去 2n。也可以:减 1 再对数值位取反,得到绝对值后加负号。