无需登录 数据私有 本地保存

浮点数二进制存储查看器 - IEEE 754 单双精度转换

29
0
0
0
0x
快速查看:
二进制存储布局
符号位(S) 指数位(E) 尾数位(M)
点击任意位可翻转,实时查看对浮点数值的影响
分解详情
计算公式
内存字节表示
大端序 (Big-Endian / 网络序)
小端序 (Little-Endian / x86)
常见问题与知识点

IEEE 754 是电气和电子工程师协会(IEEE)制定的浮点数算术标准,定义了浮点数的存储格式、运算规则和特殊值处理。几乎所有现代计算机和编程语言都遵循此标准。该标准定义了多种精度格式,最常用的是单精度(32位)双精度(64位)。浮点数由三部分组成:符号位(S)、指数位(E)和尾数位(M),使用科学计数法形式 (-1)^S × 2^(E-bias) × (1.M) 来表示数值。

特性单精度 (Float32)双精度 (Float64)
总位数32位64位
符号位1位1位
指数位8位 (偏移127)11位 (偏移1023)
尾数位23位52位
有效精度约7位十进制约16位十进制
最大值≈3.4×10³⁸≈1.8×10³⁰⁸
最小正规格化数≈1.18×10⁻³⁸≈2.23×10⁻³⁰⁸
双精度提供更高的精度和更大的表示范围,适用于科学计算、金融运算等对精度要求较高的场景。单精度占用的存储空间和带宽更少,常用于图形处理、机器学习推理等。

这是因为0.1、0.2、0.3 都无法用二进制精确表示(类似于十进制中 1/3 = 0.333... 无限循环)。在IEEE 754中,这些十进制小数被转换为无限循环的二进制小数,存储时只能保留有限位(单精度23位尾数,双精度52位尾数),因此产生了舍入误差。当进行加法运算时,这些舍入误差累积,导致结果与期望值有微小偏差。

在本工具中输入 0.1 并切换精度,可以看到其二进制存储的近似表示。双精度下 0.1 实际存储的值约为 0.10000000000000000555...

指数偏移是为了能用无符号整数来表示有符号的指数值。实际指数 = 存储的指数值 - 偏移量。单精度的偏移量为127,双精度为1023

例如,单精度下存储指数为 0b01111111 (127),实际指数 = 127 - 127 = 0,表示 2⁰ = 1。存储指数为 0b10000000 (128),实际指数 = 128 - 127 = 1,表示 2¹ = 2。这种设计简化了硬件中的浮点数比较和排序操作。

  • 规格化数:指数位不全为0且不全为1,隐含前导位为1,公式:(-1)^S × 2^(E-bias) × 1.M
  • 非规格化数:指数位全为0,用于表示极小的值(接近0),隐含前导位为0,公式:(-1)^S × 2^(1-bias) × 0.M。这使得从0到最小规格化数之间有平滑过渡
  • ±Infinity:指数位全为1且尾数全为0,表示溢出(除以0、超大数值等)
  • NaN:指数位全为1且尾数非0,表示未定义的操作结果(如 0/0、∞-∞、负数开方等)。NaN有多种表示(不同的尾数值)
  • ±0:指数和尾数全为0,符号位决定正负。+0和-0在比较时相等,但在除法中表现不同(1/+0=+∞, 1/-0=-∞)

大端序(Big-Endian):高位字节存储在低地址,符合人类阅读习惯(从左到右),网络传输通常使用大端序。
小端序(Little-Endian):低位字节存储在低地址,x86/x64架构使用小端序,是大多数PC和服务器的默认字节序。

例如,Float32的1.0(十六进制0x3F800000),在大端内存中为 3F 80 00 00,在小端内存中为 00 00 80 3F。本工具同时展示两种字节序,方便理解。