原码反码补码转换器
快速示例:
- 原码
- 反码
- 补码
- 十进制
本工具把十进制整数转成指定位数的原码、反码、补码,也可以从位串反推十进制真值。最高位是符号位:0 表示正,1 表示负。仅处理整数。
如何使用
- 十进制 → 原反补:选择 8 / 16 / 32 位,输入整数后点转换。结果按 4 位分组,并给出十六进制。
- 原反补 → 十进制:选择位数和编码类型,粘贴 0、1 组成的位串(可含空格)。位数必须正好等于机器位数。
表示范围
n 位时,数值位有 n−1 位。
- 原码、反码:−(2n−1−1) 到 +(2n−1−1)。例如 8 位是 −127 到 127。
- 补码:−2n−1 到 +(2n−1−1)。例如 8 位是 −128 到 127。
−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 再对数值位取反,得到绝对值后加负号。