关于此工具
二进制补码转换器可在你选择的位宽(4、8、16、32 或 64 位)下,将有符号整数编码为其二进制补码的二进制和十六进制表示,并将二进制或十六进制模式解码回其表示的有符号值。它全程使用 BigInt,因此 64 位值被精确处理,无精度损失。
对于 N 位宽度,有符号范围为 −2^(N−1) 到 2^(N−1)−1。要编码十进制 d:若 d 非负,模式就是 d;若 d 为负,模式为 2^N + d(等效地,将 |d| 的所有位取反再加 1)。工具输出 N 位零填充的二进制、N/4 位的十六进制、反码(按位取反),以及相同位的无符号解释,并在值不适合所选宽度时标记溢出错误。
要解码,粘贴一个二进制或十六进制模式,工具会读取其最高位:若最高有效位置位,值为 模式 − 2^N(负数),否则为模式本身。它始终并排显示有符号和无符号两种读法,这正是二进制补码在硬件层面解决的歧义。所有计算都在你的浏览器本地进行。
常见问题
每个位宽的范围是多少?
N 位宽度表示从 −2^(N−1) 到 2^(N−1)−1 的有符号值。因此 8 位跨越 −128 到 127,16 位为 −32768 到 32767,32 位约为 ±21 亿。范围外的值会触发溢出警告。
负数是如何编码的?
取其绝对值,将每一位取反(反码),再加 1。等效地,模式等于 2^N 加上该负数。例如 8 位中的 −1 是 11111111,−42 是 11010110。
为什么也显示无符号值?
同一位模式有两种读法:有符号(二进制补码)和无符号。同时显示两者能清楚地表明,例如 8 位模式 11111111 有符号时是 −1,无符号时是 255——解释取决于硬件如何处理它。
它能精确处理 64 位值吗?
能。转换器使用任意精度的 BigInt 运算,因此 64 位模式及其有符号值被精确计算,没有普通 JavaScript 数字在 2^53 以上会引入的舍入。