使用方法
- 在“数字或位”中输入数字。若输入的是位,请在“写作”下选择十六进制或二进制。
- 选择“位宽”:计算机存储的位数,即8、16、32或64。
- 在“补码位”中读取存储的位式,在“对比的形式”中查看另外两种系统。
- 若“检查”显示该数无法放入,则下方所示的位,正是计算机会改为存储的内容。
负数如何存储
计算机以固定的位数存储有符号整数。在补码中,最高位代表 −2^(n−1),其余各位照常相加。要用8位写出 −5,先把5写成00000101,逐位取反,再加1:11111010 + 1 = 11111011。
−5 → 00000101 → 11111010 → 11111011(十六进制 FB)
反码与原码
- 反码对数值的每一位取反:−5为11111010。
- 原码保留数值,并把最高位作为符号位:−5为10000101。
- 两者都有两个零。反码中全为1,以及原码中仅符号位为1,都表示 −0。
- 补码只有一个零,且负数比正数多一个。它是多数处理器用于整数的系统。
范围与溢出
在 n 位下,补码的范围是 −2^(n−1) 至 2^(n−1) − 1:8位时为 −128至127,32位时为 −2,147,483,648至2,147,483,647。超出范围的值会绕回:200需要八位,读作 −56,因为11001000在补码中就是 −56。
本工具不涵盖什么
- 运算:本工具显示数字如何存储,而不是两个数相加或相乘的结果。
- 小数与浮点数,它们有自己的格式:请参阅 IEEE 754 转换工具。
- 在溢出时报错而不是绕回的语言。本工具显示绕回的结果,并予以标出。
计算示例:8位的 −5
将“写作”设为十进制,“位宽”设为8位,输入 −5。补码的位式为11111011,十六进制为 FB,作为无符号数则为251。
同一个 −5在另外两种系统中:反码为11111010,原码为10000101。
| 系统 | 位 | 十六进制 | 值 |
|---|---|---|---|
| 补码 | 1111 1011 | FB | -5 |
| 反码 | 1111 1010 | FA | -5 |
| 原码 | 1000 0101 | 85 | -5 |
| 无符号 | 1111 1011 | FB | 251 |
常见问题
为什么计算机使用补码,而不是负号?
负号需要在每个加法电路中都有自己的规则。在补码中,正数与负数的加法和减法以同样的方式进行,而且只有一个零。
为什么负数的范围比正数多一个值?
零占去了 2^n 种位式中的一种,因此正数从1到 2^(n−1) − 1,负数则一直到 −2^(n−1)。在8位中,多出的那个值是 −128,它没有对应的正数。
本页面上的溢出是什么意思?
该数需要的位数多于位宽所能容纳的位数。页面显示位宽所能保存的位,而“检查”一行会说明该值无法放入。例如,8位中的128保存为10000000,读作 −128。
为什么计算器对64位使用精确整数?
JavaScript 的数字只有在 2^53以内才是精确的,而64位的值可达 2^64。页面使用 BigInt,因此每一位都被保留,且下限 −9,223,372,036,854,775,808会被精确显示。
Java 的整数是否使用补码?
是的。Java 语言规范以补码定义其整数类型,因此 int 是32位补码,long 是64位补码。
资料来源
数据和文字最近核对于2026年11月10日星期二。