通过MCP连接 →

输入计算

数学公式

广告

结果

补码
01001011
输入类型 decimal
原始输入 181
字长 8 位
二进制表示 10110101
反码 01001010
补码 01001011
原始十进制(无符号) 181
原始十进制(有符号) -75
补码十进制 75
原始十六进制 0xB5
有符号十六进制 0xB5
补码十六进制 0x4B

什么是补码计算器?

补码计算器可以在十进制、二进制和十六进制之间互相转换,同时直观展示计算机内部是如何表示负数的。补码(Two's Complement)是几乎所有现代处理器存储有符号整数的标准方式,因此无论你是程序员、电子专业的学生,还是从事数字逻辑相关工作的人,掌握补码都至关重要。借助这款工具,你只需以任意进制输入一个数字,选定字长(8 位、16 位或 32 位),就能立刻看到它的补码表示及对应的十进制数值。

如何使用本计算器

  • 在输入框中填入数字——支持十进制、二进制或十六进制。
  • 如有需要,选择输入数字所采用的进制。
  • 选择字长:8 位、16 位或 32 位。
  • 查看结果:二进制、十六进制以及有符号十进制数值会自动显示。

字长之所以重要,是因为它决定了可存储数值的范围。例如,一个 8 位有符号整数的取值范围是 -128 到 127,而 16 位则可表示 -32,768 到 32,767。

计算公式详解

要求出一个二进制数的补码,只需两步:

  • 逐位取反(把每个 0 变成 1,每个 1 变成 0),得到的是反码(一的补码)。
  • 在结果上加 1

最高位(最左边的一位)是符号位:0 表示正数,1 表示负数。若要把一个负的十进制数转换为补码,公式为 \(2^{n} + \text{数值}\),其中 \(n\) 是字长。

$$\text{补码} = \left(\sim \text{Number}_{\,2}\right) + 1 \pmod{2^{\text{Bit Width}}}$$

Advertisement
两步图示:先取反各位,再加一得到补码
补码的求法是先将每一位取反,再加 1。

实例演示

将 -5 转换为 8 位补码:

  • 先写出 +5 的二进制:0000 0101
  • 逐位取反:1111 1010
  • 加 1:1111 1011

因此 -5 在计算机中存储为 1111 1011,对应的十六进制是 FB。验证一下:\(251 - 256 = -5\)(其无符号值减去 256)。

圆形图示,展示有符号 8 位范围从正数回绕到负数
有符号 8 位值会回绕,将高半部分映射为负数。

按位宽的有符号整数范围

二的补码是计算机表示有符号整数的标准方法。对于给定的位宽 \(n\),一位作为符号位,因此可表示的有符号范围是 \(-2^{n-1}\) 到 \(2^{n-1}-1\),而相同位的无符号解释覆盖 \(0\) 到 \(2^{n}-1\)。所有算术运算以 \(2^{n}\) 为模进行环绕。

位宽 \(n\) 有符号最小值 \(-2^{n-1}\) 有符号最大值 \(2^{n-1}-1\) 无符号最大值 \(2^{n}-1\) 模 \(2^{n}\)
8 -128 127 255 256
16 -32,768 32,767 65,535 65,536
32 -2,147,483,648 2,147,483,647 4,294,967,295 4,294,967,296
64 -9,223,372,036,854,775,808 9,223,372,036,854,775,807 18,446,744,073,709,551,615 18,446,744,073,709,551,616

例如,十进制 5 的 8 位二的补码形式是 251(作为无符号字节读取),它表示有符号值 \(-5\)。

常见 8 位值的十进制–二进制–十六进制参考

下表将代表性的有符号十进制值映射到其 8 位二的补码二进制和十六进制形式。负数的最高有效位设置为 1。要否定一个值,反转所有 8 位并加 1。

有符号十进制 8 位二进制 十六进制 无符号值
-128 1000 0000 0x80 128
-64 1100 0000 0xC0 192
-5 1111 1011 0xFB 251
-1 1111 1111 0xFF 255
0 0000 0000 0x00 0
1 0000 0001 0x01 1
5 0000 0101 0x05 5
64 0100 0000 0x40 64
127 0111 1111 0x7F 127

要独立验证二进制形式,可以将 8 位模式 11111011 转换回十进制,作为无符号字节等于 251(作为有符号值解释为 \(-5\))。

Advertisement

关键术语和定义

位宽
用于存储整数的二进制位数(通常为 8、16、32 或 64)。它固定了模 \(2^{n}\),因此也固定了可表示值的范围。
符号位
指示有符号数为负数 (1) 还是非负数 (0) 的单一位。在二的补码中,它是最高阶位。
最高有效位 (MSB)
二进制数中最左边、最高值的位。在有符号二的补码值中,MSB 同时充当符号位。
一的补码
数的按位反演——每个 0 变为 1,每个 1 变为 0 (\(\overline{B}\))。它是形成二的补码之前的中间步骤。
二的补码
主流的有符号整数编码:通过反转所有位并加 1 来否定值,即 \(\overline{B}+1 \pmod{2^{n}}\)。它为零提供了单一表示,并让相同硬件能够对有符号和无符号数进行加法运算。
溢出 / 环绕
当结果超过位宽的可表示范围时发生的情况;该值以 \(2^{n}\) 为模进行环绕。例如,将 8 位最大值 127 加 1 会环绕到 -128。
有符号与无符号整数
有符号整数可以使用二的补码表示负数(范围 \(-2^{n-1}\) 到 \(2^{n-1}-1\));无符号整数将每个位模式视为非负数(范围 \(0\) 到 \(2^{n}-1\))。位是相同的——只有解释方式不同。

常见问题

计算机为什么要用补码?因为补码让加法和减法可以共用同一套运算电路,而且零只有唯一一种表示形式——这一点不同于原码(符号-数值)或反码。

如果数字超出了字长能容纳的范围会怎样?数值会溢出并“回绕”,产生意料之外的结果。要避免这种情况,请选择更大的字长。

如何把补码转换回普通十进制?如果符号位是 1,就再求一次补码并加上负号;如果符号位是 0,直接当作普通二进制数读取即可。

最后更新: