IEEE 754 转换

位布局 — 点击某一位可翻转

符号 指数 尾数

字段 位 编码 含义

IEEE 754 转换器

这是 IEEE 754 转换器:贴十进制或 hex 位型,看符号、指数、尾数和实际存进去的值。 IEEE 754 把实数打成符号、偏置指数和尾数。binary16、bfloat16、binary32、binary64、NaN、Infinity、ULP 等标识不翻译。binary32 的 1 大端 hex 是 3F800000(小端 0000803F)。binary64 的 1 是 3FF0000000000000。0.1 在 binary32 是 3DCCCCCD,实际存的是 0.10000000149011612。π 的 binary32 是 40490FDB。+∞ 是 7F800000,−0 是 80000000,quiet NaN 常见为 7FC00000。

如何使用

  1. 选择 binary16、bfloat16、binary32 或 binary64。输入十进制(1、0.1、Infinity、NaN、-0)或 hex 位模式。
  2. 快捷按钮可载入 0.1、1、3.14159、±0、±∞、NaN。显示示例是 1 → 3F800000。
  3. 点击任意位翻转。Hex 可按 big-endian(常见位模式)或 little-endian(dump 顺序)显示。
  4. 查看类别(normal / subnormal / zero / inf / nan)、存储值、舍入误差和相邻 ULP。复制结果复制 hex。

字段、偏置和特殊值

值 = (−1)sign × 有效数字 × 2指数−偏置。偏置为 15(binary16)、127(binary32 / bfloat16)或 1023(binary64)。指数全 1 且尾数为 0 是 ±Infinity,尾数非 0 是 NaN。指数全 0 且尾数为 0 是 ±0,尾数非 0 是次正规数(没有隐含 1)。binary16 最大有限值是 65504(7BFF),再大就变成 Infinity;bfloat16 则保留 binary32 的范围。

为什么 0.1 + 0.2 ≠ 0.3

这些十进制在二进制里是循环小数。binary64 存的 0.1 略大于 0.1;相加后比字面量 0.3 高一个 ULP。语言打印会看起来很整。本页显示位模式。不要用 === 比较浮点,请用容差。金额不要放进二进制浮点。

Hex dump 与字节序

Hex 框是位串当成整数。big-endian 和教材、本页默认一致。3F800000 的小端 dump 是 0000803F — 把字节序改成 Little-endian,或用字节序工具。16 / 32 / 64 位格式分别需要 4 / 8 / 16 位 hex 数字。

常见问题

  • 为什么 1.0 是 8 位 hex? binary32 是 4 字节。
  • 要 64 位? 换成 binary64,1 是 3FF0000000000000。
  • 哪种 NaN? JavaScript 是 quiet NaN。x === NaN 恒为假,用 Number.isNaN。
  • 会上传吗? 不会。DataView 在浏览器里运行。

相关工具

交换 dump 字节用 大小端转换。把位模式当整数读用 十六进制转十进制。整数互转用 十进制转十六进制。

需要整数 hex 而不是浮点? 十进制转十六进制 →