⭐ 觉得好用?收藏备用,下次直接打开
位宽
0
HEX0
DEC0
OCT0
BIN0
🧮 IEEE 754 浮点解析 从当前整数位模式反解,或输入小数反推位
Float32 (低 32 位)
S0 E (8)00000000 M (23)0000000 00000000 00000000
HEX0x00000000
0
Float64 (完整 64 位)
S0 E (11)00000000 000 M (52)0000 ...
HEX0x0000000000000000
0

进制计算器(又称程序员计算器)在 HEX / DEC / OCT / BIN 四种进制间无损实时同步,支持位运算(AND/OR/XOR/NOT/<</>>)、两补码符号切换、可点击位翻译面板,以及 IEEE 754 浮点解析。全部计算基于 JS 原生 BigInt + DataView,纯本地运行,不上传任何数据。

四路显示:顶部选哪个基数作为主输入,显示区下方就会四路同时刷新——改 0xFF,DEC 立刻显示 255、BIN 显示 1111 1111、OCT 显示 377。切换基数时位值不变,只是换一种展示形式。

位宽与符号

位宽无符号范围有符号范围
8-bit0–255−128–127
16-bit0–65535−32768–32767
32-bit0–4294967295−2147483648–2147483647
64-bit0–2⁶⁴−1−2⁶³–2⁶³−1
128-bit0–2¹²⁸−1±2¹²⁷
任意大 BigInt保留符号

位运算行为:所有位运算先按当前位宽归一(两补码),再做计算。例如 8-bit 下 0xFF AND 0x0F = 0x0F;64-bit 下 NOT 0 = 0xFFFFFFFFFFFFFFFF。连按 = 重复上一次运算(如连续右移)。

算术口径

运算固定位宽 Signed固定位宽 Unsigned∞ 位宽
+ ×模 2N,位模式相同同左BigInt 原生
÷ modasIntN(两补码有符号)asUintN(无符号位值)BigInt 原生
>>算术右移(符号扩展)逻辑右移(零填充)BigInt 原生(算术)
<< AND OR XOR NOT位模式一致同左BigInt 原生

同一位模式切换 Signed ↔ Unsigned,+×<<ANDORXORNOT 结果位模式不变(只有 DEC 解读变);但 ÷%mod>>位模式本身会不同,这是语义上的真实差异,不是 bug。

位翻译面板

位宽不为 ∞ 时显示,每 4 位一组,点击即翻转——最直接地验证 (x & 0x0F) | 0x80 这类掩码操作的结果。右 = LSB(bit 0),左 = MSB,与大多数教材 / 调试器一致。

IEEE 754 浮点解析

底部可展开”浮点解析”。上方输入小数可一键加载为 32 / 64-bit 位模式;当前整数值也会被自动按 Float32(低 32 位)和 Float64(低 64 位)反解,展示符号位 / 指数字段 / 尾数字段的二进制,以及对应的十进制浮点值。

精度说明

整数运算精确到任意大。浮点解析走 IEEE 754 标准的舍入,如 0.1 被编码为 0x3FB999999999999A——反解回来不再是纯粹 0.1 而是 0.1000000000000000055...,这是浮点标准的固有限制,不是工具的问题。

📍使用场景

  • 嵌入式 / 单片机调试寄存器值在 HEX/DEC/BIN 之间来回切换,位面板直接点击翻位验证掩码。
  • 网络协议位字段手算 TCP flags / IP 头 / TLV 编码时,按位查看字段偏移与掩码。
  • 逆向与反汇编反编译数值按 Signed/Unsigned 两种视角看,判断是负整数还是地址。
  • 浮点格式排错把 0xC0490FDB 反解成 -3.1416,或把 1.5 编成 IEEE 754 位模式。

常见问题

固定位宽下 NOT 0 为什么是 FFFFFFFF 而不是 -1?

固定位宽按两补码展示位模式。32-bit 下 ~0 的所有位都是 1,无符号读作 4294967295,有符号读作 −1。本工具默认 Unsigned 视角展示 DEC;切到 Signed 就会看到 −1。∞ 位宽下保留 BigInt 语义,NOT 0 直接是 −1。

为什么 HEX / BIN / OCT 不受 Signed 切换影响?

按位展示没有"符号"一说——位就是位。Signed 改变 DEC 列的解读方式(把最高位当符号位还是普通数据位),同时让 ÷ % mod >> 按有符号口径运算。HEX/BIN/OCT 的字符面始终一致——0xFFFFFFFF(32-bit)永远是 FFFFFFFF,只有 DEC 在 4294967295 和 −1 之间切换。

Signed 切换下同一位模式做 ÷ 为什么结果不同?

这是有意的。例如 8-bit 0xFF:Signed 视角下是 −1,−1 ÷ 2 = 0(朝零截断);Unsigned 视角下是 255,255 ÷ 2 = 127。两种口径都对应真实机器指令(x86 的 IDIV vs DIV)。切换 Signed 就是切换 "这段位要按哪种整数类型解释",除法/取模的结果自然也跟着变。+ − × 不受影响——在模 2<sup>N</sup> 下位模式相同。

>> 是算术右移还是逻辑右移?

看 Signed/Unsigned 视角。固定位宽 + Signed 时为算术右移(符号位扩展,如 8-bit Signed 0xF0 >> 2 = 0xFC = −4);Unsigned 时为逻辑右移(零填充,0xF0 >> 2 = 0x3C = 60)。∞ 位宽下走 BigInt 原生算术右移。<< 两种视角位模式相同。

位翻译面板的位序是怎样的?

右 = LSB(bit 0),左 = MSB,与大多数教材/调试器一致。每 4 位为一个 nibble,每行 16 位。每组最右侧会标出该位的位号,便于定位。∞ 位宽下不显示面板(位数无上限无法全屏渲染)。

IEEE 754 解析的 Float32 和 Float64 分别用哪些位?

Float32 取当前值的低 32 位(bit 31..0),按符号位(1) + 指数(8) + 尾数(23) 解读。Float64 取低 64 位(位宽 < 64 时零扩展),按符号位(1) + 指数(11) + 尾数(52) 解读。顶部小数输入框可反向:输入 3.14 一键加载为 32 或 64-bit 位模式。

输入小数(如 0.1)能进位运算吗?

不能直接输入。本工具是整数位运算计算器,键盘禁用了小数点。要对小数做位级研究,请用 IEEE 754 面板:在输入框填入 0.1,加载为 64-bit 位模式,之后就能按位观察、做 AND/OR/位翻转、再用 IEEE 面板反解为浮点。