核心内容#
- IEEE 754 浮点数的存储格式(表示方式),尤其是单精度✅️
- IEEE 754 规格化的表示范围✅️
- 真值和浮点数之间的转换计算✅️
- 超出规格范围(溢出)后的处理(二轮再回来看)
- 几种特殊状态:阶码全 1/0
- 浮点数的加减运算(二轮再说)
- 数据的存储方式:大端、小端✅️
表示#
浮点数采用科学计数法记录。
一个浮点数由符号位 s、阶数 e、尾数 f 和基数 R 组成,例如 ,从左到右分别为:
规格化:把尾数最高位的非 0 数位正好在小数点之前。

例如图中的两个非规格表示,其规格化表示为:
![]()
由此,引出二进制下的规格化浮点数:基数 R 默认是 2,而它同样由符号位、阶数、尾数、基数组成。

这样,将浮点数规格化后,可方便采用规范化格式将浮点数存储于计算机。
存储格式#

IEEE 754 有两种精度:32 位和 64。
在 32 位单精度格式,它包含 1 位符号位、8 位阶码、23 位尾数。由于规格化的二进制浮点数,其尾数小数点前一位一定是 1,且默认 R=2(二进制),因此可以不显示最高位的 1,我们常称其为隐藏位。这样 f 虽然只有 23 bit,但实际表示的是 24 bit 的有效数字。例如 ,规格化表示为 ,实际上存储时, ,小数点前的 “1” 并不实际存储,阶码保存的是 3 的编码值。
64 位的处理和 32 位一样,只是阶码和尾数的位数不同。
阶码表示的是可存储的数值范围,后续展开说明。

阶码采用移码方式表示,且偏置值为 ,因此 32 位和 64 位的偏置值分别为 127 和 1023。这样实际 32 位浮点数的阶码的存储为:
res 才是要存储的二进制值的十进制表示。
偏置值是移码的一种形式,可以类比于模电中的直流偏置,即在原信号的基础上提供一个直流偏置
例如图中阶码是 2,所以 res = 129,存储的就是 129 的二进制值(移码只是告诉你存储的形式,实际上计算没用到)
真值表示#
IEEE 754 32 位浮点数的真值表示:
64 位的真值表示:
其中单精度浮点数的 e 取值范围为:(全 0 和全 1 用于特殊表示),双精度为:(用途相同)。
取值范围#
由上面阶码 e 的取值范围,实际上可以得到单精度和双精度的绝对值表示范围。
上面是阶码 无符号整数 的二进制表示范围,而以下需要先转为真值(减去偏置值)。
以 32 位为例子,其阶码在二进制中由于不能全 0 或全 1,因此二进制表示为
0000 0001到1111 1110,转为十进制就是1到254;再减去偏置值 127,得到阶码的真值范围:-126 ~ 127。因此 32 位能表示的最小值,它的真值的阶码是 -126,尾数是 1.0;最大值的阶码是 +127,和下表相同。
| 位数 | 最小值 | 最大值 |
|---|---|---|
| 单精度(32 位) 1+8+23 | 真值为 | 真值为 |
| 双精度(64 位) 1+11+52 | 真值为 | 真值为 |
疑惑: 是由于小数部分的原码(真值)的二进制表示是 ---- 不懂
十进制真值与二进制单精度浮点数的转换#

以这个例题说明。
- 先把真值 转为二进制表示,再转为规格化的二进制科学计数法。
- 注意我们的构造表达式:
- 由规格化浮点数式子可知:
- 由偏置值公式: 得到 ,进而得到阶码的移码(129 的二进制值)
- 最后对尾数进行扩充,直到 23 bit 。
- 使用十六进制写出结果
而将 32 位浮点数转为十进制真值同理,只要记得偏置值和阶码的转换关系即可。
几种特殊状态的浮点数#

数据的宽度和存储#
大小端介绍可点击链接。
大端、小端格式存储 ↗#
- 一个 32 位 字 0x12345678,---- 即 4 字节
- 若采用大端方式存储,则在内存中的排列是:12 34 56 78
- 若采用小端方式存储,则为: 78 56 34 12
- ARM 存储字数据有两种方式,即大端格式和小端格式,如果有一个 32 位 字
0x12345678存放的起始地址为0x0004 0000,在两种格式下分别如何存放?计算机通常情况默认为什么格式?- 起始地址为 0x0004 0000。由于是 32 位字(4 字节),它将占用 0x0004 0000、0x0004 0001、0x0004 0002、0x0004 0003 这四个内存地址。
- 在大端格式下 (Big-Endian):
- 最高有效字节 0x12 存储在最低地址 0x0004 0000。
- 次高有效字节 0x34 存储在 0x0004 0001。
- 次低有效字节 0x56 存储在 0x0004 0002。
- 最低有效字节 0x78 存储在最高地址 0x0004 0003。
大端格式与小端格式:
- 大端格式(Big-Endian)
- 指数据的高位字节 (Most Significant Byte, MSB) 存放在内存的低地址处
- 数据的低位字节 (Least Significant Byte, LSB) 存放在内存的高地址处。
- 简单记就是“高位在前,低位在后”。
- 小端格式 (Little-Endian)
- 指数据的低位字节存放在内存的低地址处。
- 数据的高位字节存放在内存的高地址处。
- 可以记作“低位在前,高位在后” (相对于内存地址的增长方向)。
MSB (Most Significant Byte):指的是最高有效字节,也就是数据在内存里存储的最高位字节
LSB:反之。
例子:32 位计算机中,一个 int 型变量 i 的机器数位 01 23 45 67H,那么它的 MSB = 01H,LSB=67H(01 在数据中是高位字节 MSB)