二进制补码表示什么
二进制补码是计算机保存有符号整数的主流方式。固定宽度决定可用位模式:最高位为 0 时通常表示非负数,最高位为 1 时表示负数。8 位的 01111111 是 127,10000000 是 -128,11111111 是 -1。相同位模式若按无符号读取,又会得到 0 到 255 的值。
本工具把“宽度”和“解释方式”明确分开。有符号模式严格检查有符号范围,无符号模式检查原始位模式范围,位串模式要求恰好等于所选宽度,并同时给出两种十进制解释。不会对越界输入静默截断或回绕。
使用方法
先确认输入来自数学数值还是原始位模式。
- 选择有符号十进制、无符号十进制或精确位串。
- 选择 8、16、32 或 64 位,这会决定范围、符号位和输出长度。
- 输入整数或仅由 0/1 组成的完整位串。
- 点击“计算”,查看位串、补零后的十六进制以及两种十进制解释。
- 复制到代码或调试器时保留位宽和前导零,否则符号含义可能改变。
补码示例
除特别说明外,下列案例使用 8 位。
| 输入 | 位模式 | 说明 |
|---|---|---|
| 42(有符号) | 00101010 | 正数使用普通二进制并补足前导零。 |
| -42(有符号) | 11010110 | 对 42 的位模式取反再加一。 |
| -1(有符号) | 11111111 | 任意常见位宽下,全 1 都表示 -1。 |
| 128(无符号) | 10000000 | 无符号是 128,有符号解释则是 -128。 |
| 32767(16 位) | 0111111111111111 | 16 位有符号最大值。 |
| -9223372036854775808(64 位) | 8000000000000000(十六进制) | 64 位有符号最小值只有符号位为 1。 |
位宽、范围与输入规则
n 位有符号范围为 -2ⁿ⁻¹ 到 2ⁿ⁻¹-1,无符号范围为 0 到 2ⁿ-1。8 位分别是 -128 到 127,以及 0 到 255。64 位边界也会通过 BigInt 精确处理。
十进制可带正负号、空格或下划线。位串可带 0b 前缀及分组符,但清理后必须恰好等于所选位宽,避免自动零扩展或符号扩展造成歧义。
- 有符号模式越界会报错,不会自动回绕。
- 无符号模式拒绝负数和超过全 1 模式的值。
- 位串模式保留前导零,并同时显示有符号与无符号含义。
- 8/16/32/64 位对应 2/4/8/16 位十六进制输出。
补码算法
非负数直接使用普通二进制。负数 x 在 n 位中的无符号模式为 2ⁿ+x,例如 -42 在 8 位中是 256-42=214,即 11010110。
解码时先按无符号读取。如果最高位为 0,有符号值相同;如果为 1,则减去 2ⁿ。
所有计算都使用 BigInt,因此 64 位最小值、最大值和无符号最大值不会丢失精度。
实际用途
当原始字节需要解释为固定宽度有符号整数时,补码是必要工具。
调试寄存器和内存
把调试器中的字节、字或寄存器同时解释为有符号和无符号数。
解析二进制协议
核对传感器读数、计数器、音频样本或设备字段。
编写边界测试
生成最小值、最大值、-1、0 和符号跳变的精确模式。
理解整数溢出
观察固定寄存器中最高位变化为何会改变符号。
常见错误与边界
位宽缺失或有符号/无符号混用是最常见原因。
选择错误位宽
11111111 在 8 位是 -1,零扩展到 16 位后却是 255。
十进制越界
8 位有符号不能表示 128,但 8 位无符号可以。
丢失前导零
缩短后的位串可能保留无符号大小,却失去原始存储宽度。
混淆其他负数编码
本工具只实现二进制补码,不处理符号-数值或反码。
与相关工具的区别
补码关注固定宽度下的解释,而不是只改变进制。
十进制转二进制
普通转换可能写成 -101010;补码给出真实存储模式 11010110。
位运算计算器
位运算会组合或移动位,本页只转换和解释单个值。
IEEE-754
浮点数使用符号、指数和尾数字段,不是整数补码。
八进制/十六进制转换
普通进制转换保持数学值,补码解释会依据最高位和宽度改变有符号值。