数值 / 位运算 / 单位

IEEE 754 浮点数转换看清每一位的含义

输入一个十进制数,或粘贴完整的 Hex / 二进制位模式,对照精确存储值和舍入误差。

IEEE 754 浮点数转换

输入

输入仅在当前浏览器中处理,不会发送到服务器。

十进制使用小数点,可带 e/E 指数。Hex 须为 8/16 位,二进制须为 32/64 位;原始字允许 0x/0b 前缀和空格、制表符分组。

结果

十进制短显示 · 9 / 17 位有效数字

0.100000001

正规数

符号位 · 1 位

0

存储指数 · 8 位

01111011

尾数字段 · 无符号整数 · 23 位

10011001100110011001101
浮点精度
32 位 · binary32
输入表示
十进制数值
十六进制逻辑字
0x3DCCCCCD
二进制逻辑字
00111101110011001100110011001101
符号位
0
存储指数
123
有效指数
-4
尾数字段 · 无符号整数
5033165
隐含前导位
1
精确值公式
13421773 × 2^-27
转换情况
已舍入 · 最近值,中点取偶数
精确存储值 · 完整十进制
0.100000001490116119384765625
有符号误差 · 存储值 − 输入值
0.000000001490116119384765625

选项

直接舍入到所选格式:取最近值,中点取偶数。更改精度或输入表示会重新解释当前文本。输入最多 1024 字符,显式十进制指数范围为 −4096…4096。

解析完成。

IEEE 754 浮点数转换适合排查这样的差异:调试器显示的是 0.1,实际参与比较的数却略大于它。把完整十进制展开与原输入放在一起,就能看到短显示隐藏了哪些位,而不必凭显示的小数位数猜测精度。

浮点数转十六进制用于生成测试字,反向读取则适合检查已有寄存器或协议字段。选择单精度和双精度会改变编码规则;若输入来自内存转储,请先确认字节顺序,再把它作为完整逻辑字输入。

为什么使用 IEEE 754 浮点数转换

同一目标,对应不同存储点

IEEE 754 浮点数转换分别将原始十进制目标舍入到两种格式。0.1 在单精度下存为 0.100000001490116119384765625,双精度更接近目标,但仍不完全相等。误差的正负号能告诉你,实际存储点位于目标的哪一侧。

同一个目标位置投射到间隔不同的两条数值网格,圆环标出各自最近的可表示点。

不同 NaN 载荷保持不同

7FC00001 与 7FC00002 都属于静默 NaN,但载荷分别是 1 和 2。读取原始字时保留这一差别,也保留符号和 quiet 位;不会因为二者都显示为 NaN,就把位模式改写成相同的规范值。

两个具有不同载荷标记的 NaN 字模式分别输出,标记保持各自原样。

先辨认表示,再比较精度

01

明确输入是数值还是位模式

默认用 binary32 查看十进制 0.1。切换到 Hex 是重新解释现有文本,不是把文本自动转成十六进制;应粘贴完整逻辑字,最高有效位放在左边。选择双精度后,原始字也必须补齐为对应的完整来源数据。

02

不要把短显示当作精确值

短显示采用 9 位或 17 位有效数字,便于快速识别数量级。完整十进制区域保留所有数字;有符号误差定义为存储值减去输入值,所以负误差表示存储值小于目标,而不是解析失败。

03

在预览中选择特殊值

示例入口提供五种预览,包括负零、最小正次正规数和带载荷的 NaN。应用后可撤销并恢复原结果。自动转换等待 350 毫秒;关闭后使用解析按钮或 Ctrl/Cmd + Enter,未更新前不能导出旧结果。

从位字段读懂存储值

符号位、指数位、尾数位分别展示

单精度按 1/8/23 位分组,双精度按 1/11/52 位分组。存储指数、有效指数和隐含前导位分开呈现:正规数的前导位是 1,次正规数是 0,因此全零指数不能直接套用正规数的解释方式。

直接舍入,保留中点两侧的区别

十进制先作为精确有理数处理,再舍入到目标有效数。略大于 1.000000059604644775390625 的数应舍入到下一个单精度值;若先经过双精度再转单精度,极小的差别可能提前丢失。这里避免了这条二次舍入路径。

生成可复核的测试记录

Hex 与二进制输出保留完整字,包括信号 NaN。可以单独复制位模式,也可导出带原输入、精度、各字段、精确十进制和误差的报告,用于对照调试器或实现自己的编码测试。报告只对应当前已完成解析的输入。

精度、语法与特殊值的边界

只支持两种格式与一种舍入规则
实现范围为 binary32 和 binary64。十进制取最近值,恰处中点时选保留有效数最低位为偶数的一侧。不提供半精度、bfloat16、扩展精度或其他舍入模式,也不模拟浮点运算的异常标志。
原始字宽度必须准确
Hex 必须为 8 或 16 个数字,二进制必须为 32 或 64 位。允许匹配的前缀、ASCII 空格和制表符;缺位、多位、下划线或其他非法字符均报错。不会静默补零、截断或交换字节,以免改变原始证据。
溢出和次正规数不是语法错误
有限输入过大时可能舍入为有符号无穷大,极小时可能得到次正规数或有符号零。只有有限十进制输入与有限结果之间才计算有符号误差;原始位模式没有额外的十进制目标,特殊值文本也不显示虚构的数值误差。
NaN 标记与载荷分别解释
尾数字段最高位按 1 表示 quiet 的常见约定解释,载荷不包含这一位。十进制 NaN 文本生成载荷为零的规范静默 NaN;要检查其他模式,应选择 Hex 或二进制输入。这里只解释位模式,不承诺模拟旧架构的不同约定。
输入语法和资源限制固定
每次处理一个值,最多 1024 字符,显式十进制指数为 −4096 到 4096。数值使用 ASCII 数字和小数点,不接受逗号小数、表达式或换行。不提供文件、URL、批量导入、字节序转换、逐位按钮、相邻值导航、ULP 距离或相对误差。

IEEE 754 浮点数转换常见问题

0.1 加 0.2 为什么不等于 0.3?

0.1 与 0.2 在二进制中都是无限循环小数,保存时先各自舍入,运算结果还可能再次舍入,因此显示结果可能偏离十进制的 0.3。本页能查看各个数的编码和误差,但不执行加法表达式;请分别输入要检查的单个值。

float 和 double 的精度差在哪里?

常见 float 对应 binary32,有 23 个显式尾数位,正规数加隐含位后为 24 位有效二进制精度。double 对应 binary64,为 52 加 1 位。双精度还能用更宽的指数表示更大或更小的数量级,但不能把 0.1 变成精确的有限二进制数。

指数偏置 Bias 如何理解?

正规数的存储指数需要减去偏置:单精度偏置为 127,双精度为 1023。全零指数有特殊含义,次正规数的有效指数分别固定为 −126 和 −1022,前导位为 0。全一指数则用于无穷大或 NaN,不能套用有限数公式。

输入的 NaN 位模式能保留吗?

Hex 或二进制输入会保留完整模式,包括符号、quiet 位和载荷。7FC00001 与 7FC00002 不会合并。若直接输入文本 NaN,则没有提供具体载荷,工具会生成规范静默 NaN;二者的输入意图不同。

内存字节序会影响十六进制的解读吗?

会影响从内存字节流拼出逻辑字的过程。本页按最高有效位在左读取 Hex,不进行大小端交换。例如小端内存中的 00 00 80 3F 应先整理为逻辑字 3F800000,再按单精度读取,才得到 1。

结果与预期不符?

换一个边界值试试

用 IEEE 754 浮点数转换核对一个寄存器字或舍入边界。每次只更改一个条件,确认新结果完成后,再复制完整记录进行对照。