AZ Tools

二进制补码转换器 (8–64 位)

转换

二进制补码是几乎所有计算机存储有符号整数的方式:最高位是符号位,负数通过对其数值的位取反再加一得到。本转换器接受任意整数 — 以十进制、hex(0x)、二进制(0b)或八进制(0o)输入,正负皆可 — 将其装入所选的 8、16、32 或 64 位宽度,并显示突出符号位的结果位模式。从这一个模式中同时读出有符号(补码)值与无符号值,并附带 hex、八进制和反码。它能快速回答诸如「0xFF 作为有符号字节是什么?」(−1)或「−128 在 8 位中如何存储?」(0x80)之类的问题,并展示数值在超出宽度时如何回绕。任意精度 BigInt 运算保证 64 位值精确。全部在本地运行;不上传任何内容。

hex 加 0x,二进制加 0b,八进制加 0o 前缀;否则为十进制。允许前导 −。

位模式

1101 0110

有符号 (补码)-42
无符号214
Hex0xd6
八进制0o326
反码0x29

补码:最高位是符号位。同一模式可读作一个有符号值和一个无符号值。

使用方法

  1. 以十进制输入值,或为 hex、二进制、八进制加 0x / 0b / 0o 前缀。
  2. 选择位宽(8、16、32 或 64)。
  3. 查看有符号/无符号值、位模式、hex/八进制与反码;若值未能容纳而回绕,会出现提示。

常见问题

负数如何表示?
在补码中,取绝对值的二进制,将每一位取反(反码),再加一。对于 8 位的 −5:5 是 00000101,取反为 11111010,加一为 11111011 = 0xFB。最高位为 1 表示其为负。本工具会对任意宽度自动完成。
为什么 0xFF 同时显示为 255 和 −1?
同一位模式按无符号或有符号读取会表示不同的数。作为无符号字节,11111111 是 255;作为有符号补码字节,是 −1。硬件与语言按类型选定一种解释(如 uint8 与 int8),本工具则同时显示两者。
若我的数装不下该宽度会怎样?
会回绕。超出宽度范围的值会对 2^宽度 取模 — 这正是定宽整数运算在溢出时所做的。例如 8 位的 300 变为 300 − 256 = 44,有符号读法由该模式得出。发生回绕时会有提示。
反码与补码有何区别?
反码只是按位取反 — 每个 0 变 1,反之亦然。补码是反码加一,现代 CPU 用它表示有符号整数,因为它只有一个零且使加法统一。工具额外显示反码作为参考。

相关工具