二进制补码计算器

输入一个有符号数,或一个数的二进制位,即可看到计算机存储的位式。反码与原码形式并列显示,便于比较三种系统。

免费 在浏览器中运行 核对于2026年11月10日星期二

有符号数,例如 -5;或以十六进制或二进制写出的位,例如 FB 或11111011。

写作

结果

补码位 — 该位宽为此数保存的位,每四位一组。
十六进制 —
有符号值 — 这些位在补码中所代表的数。
无符号值 —
此位宽的范围 —
检查 — 说明该数是否能放入此位宽。
对比的形式

此工具在您的浏览器中运行。您输入的内容不会发送给我们。

使用方法

  1. 在“数字或位”中输入数字。若输入的是位,请在“写作”下选择十六进制或二进制。
  2. 选择“位宽”:计算机存储的位数,即8、16、32或64。
  3. 在“补码位”中读取存储的位式,在“对比的形式”中查看另外两种系统。
  4. 若“检查”显示该数无法放入,则下方所示的位,正是计算机会改为存储的内容。

负数如何存储

计算机以固定的位数存储有符号整数。在补码中,最高位代表 −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日星期二。

我们使用必要的 Cookie 来运行网站。经您同意后,Google 还会使用广告 Cookie 展示个性化广告。如果您拒绝,仍会看到广告,但广告不会个性化。