通过MCP连接 →

输入计算

数学公式

广告

结果

Two's Complement Binary (8-bit)
11111011
存储位模式
无符号存储值 251
有符号解读值 -5
补码(取反) 5

什么是补码计算器?

补码(two's complement)是计算机用固定位数表示有符号整数的标准方式。本计算器接收一个十进制数和一个 n 位 寄存器宽度,然后展示该数值如何以补码位模式存储、这些二进制位对应的无符号值是多少,以及它们作为有符号数时该如何解读。无论输入正数还是负数都能处理。

使用方法

输入你想编码的十进制数和位数(常见为 8、16、32 位)。计算器会用取模运算把数值"装"进 n 位寄存器,显示其二进制表示,并解码出对应的有符号含义。负数会自动以补码形式存储。

公式详解

要把数值 \(x\) 存进 \(n\) 位中,存储的(无符号)位模式按下式计算

$$\text{stored} = \big(\big(x \bmod 2^{n}\big) + 2^{n}\big) \bmod 2^{n}$$

某个存储值的补码(即取反)为

$$\text{twos} = \big(2^{n} - \text{stored}\big) \bmod 2^{n}$$

要解读一个 \(n\) 位模式的有符号含义:如果该模式不小于 \(2^{n-1}\),其值为 \(\text{pattern} - 2^{n}\)(负数);否则其值就是模式本身。

八位二进制单元,最左侧位标记为负号权重
在二进制补码中,最高有效位带有负权重,将取值范围分为正数和负数。

实例演算

用 8 位编码 -5。这里 \(2^{8} = 256\),因此

$$\text{stored} = \big((-5 \bmod 256) + 256\big) \bmod 256 = 251$$

换算成二进制,\(251 = 11111011\)。解码 251:由于 \(251 \ge 2^{7}\)(128),其有符号值为 \(251 - 256 = -5\)。251 的补码为 \((256 - 251) \bmod 256 = 5\),正好等于数值的绝对值。

三步图示:原始位、取反后的位,然后加一以取负
要取负值,将每一位取反再加一。

常见问题

为什么负数看起来是一长串很大的二进制? 因为高位都是 1;在 \(n\) 位有符号运算中,最高位为 1 表示这是一个负数,所以 11111011 是 -5,而不是 251。

n 位能表示的范围是多少? 有符号值的范围是 \(-2^{n-1}\) 到 \(2^{n-1} - 1\)。以 8 位为例,就是 -128 到 127。

如果我的数太大了怎么办? 超出寄存器范围的数值会通过取模运算回绕(溢出),这和真实硬件的行为完全一致。

最后更新: