补码计算器是什么?
补码(two's complement)是计算机存储有符号整数的标准方式。本计算器可将任意十进制数按你选定的位宽(4、8、16 或 32 位)转换为对应的补码二进制表示,同时显示这串二进制位作为无符号数读取时的值,以及作为有符号数解码后得到的值。
使用方法
输入一个十进制数(正数或负数皆可),再选择位宽。工具会对该数取模 \(2^{n}\),得到 CPU 实际存储的精确位模式。它还会告诉你同一串位模式按有符号方式解码后对应的值,方便你验证「转过去再转回来」是否一致。
公式详解
对于 n 位字段,无符号表示为 u = ((x mod 2^n) + 2^n) mod 2^n。这一步会让负数「绕回」到正区间:在 8 位下,-5 变为 256 − 5 = 251,其二进制为 11111011。要把位模式解码回有符号值,需查看最高有效位(MSB):若它为 1(即 u ≥ 2^(n-1)),则该值为 u − 2^n;否则就是 u 本身。另一种等价的取负方法是「按位取反再加一」:~x + 1。
实例演算
将 −5 转换为 8 位补码。第一步:\(2^{8} = 256\)。第二步:\(u = ((-5 \bmod 256) + 256) \bmod 256 = 251\)。第三步:251 的二进制为 11111011。由于 MSB 为 1,有符号值即为 \(251 - 256 = -5\),验证转换正确。
常见问题
如果数值超出位宽能表示的范围怎么办?它会按模 \(2^{n}\) 发生回绕(溢出),与硬件的处理方式完全一致。例如 300 在 8 位下会变成 \(300 - 256 = 44\)。
为什么无符号值和有符号值不一样?同一串二进制位有两种读法。无符号方式把所有位都当作正权重;有符号方式则把最高位当作负权重来计算。
支持 64 位吗?本工具仅支持到 32 位的常见位宽,以确保计算结果保持在安全的精度范围内。