什么是二进制补码?
二进制补码是计算机用固定位数存储有符号整数(可为正或为负的数)的标准方式。它不为负号单独保留一个符号,而是对负数进行编码,使普通的二进制加法直接成立,无需对符号做特殊处理。几乎每一款现代 CPU 都以这种方式表示整数。
本计算器接收一个十进制整数和一个位宽(8、16 或 32 位),并以二进制和十六进制两种形式显示其二进制补码位模式。
它是如何工作的?
对于所选的 位宽度,每个数值都以无符号位模式存储:
- 如果数字 是非负的,其位模式就是 的二进制,并在前面补零至 位。
- 如果数字 是负的,其位模式是 的二进制。
由于第二种情况下 为负, 是一个小于 的正值,因此它总能容纳在 位中。最高有效位(最左侧位)对每个负数都为 ,对每个非负数都为 ——该位起到符号位的作用。
公式
结果随后以恰好 个二进制数字(或 个十六进制数字)写出。
计算实例
示例 1:正数
在 位中编码 。由于 ,位模式就是 的二进制,补足到八位:
示例 2:负一
在 位中编码 。由于 ,计算 :
无论位宽如何,负一始终是一连串不间断的 1。
示例 3:负五
在 位中编码 。计算 :
参考表(8 位)
| 十进制 | 二进制补码 | 十六进制 |
|---|---|---|
| 5 | 00000101 | 0x05 |
| 0 | 00000000 | 0x00 |
| -1 | 11111111 | 0xFF |
| -5 | 11111011 | 0xFB |
| 127 | 01111111 | 0x7F |
| -128 | 10000000 | 0x80 |
注意事项
- 一个 位有符号整数的范围是 到 ; 位的范围是 到 ; 位的范围大约是 十亿。超出所选范围的值会按模 回绕。
- 首位是符号位: 标记非负数, 标记负数。
- 若要将一个不带符号位的普通非负数转换为二进制,请使用十进制到二进制转换器,或使用通用的数字系统转换器处理其他进制。
常见问题解答
二进制补码中的 -1 是什么?
在任何位宽下它都是全 1:8 位为 (0xFF),16 位为 (0xFFFF),依此类推。
如何手动求负数的二进制补码?
将该数的绝对值写成二进制,翻转每一位,然后加一。对于 8 位中的 : 是 ,翻转后得到 ,加一得到 ——与 的结果相同。
为什么位宽很重要?
位宽决定了位模式占用多少位,从而决定了可存储数字的范围。随着位宽增大,同一个十进制值会产生更长的前导 0 或 1 串。