# 实数的二进制表示

> CIE A-Level 计算机科学 · 9618
> 来源: https://www.owlsprep.com/zh/study/cie-9618-u1-binary-representation-of-real-numbers/

本子主题介绍非整数（实数）如何以二进制存储，包括定点格式和浮点格式、规格化，以及存储值的范围和精度之间的核心权衡。

**先修:** [有符号和无符号二进制整数](https://www.owlsprep.com/zh/study/cie-9618-u1-binary-integers/); [二进制补码表示](https://www.owlsprep.com/zh/study/cie-9618-u1-signed-binary/)

## 学习目标

- 区分定点和浮点二进制表示
- 将十进制实数转换为规格化浮点二进制数
- 将规格化浮点二进制数转换回十进制
- 根据位分配解释范围和精度之间的权衡

## 定点二进制表示

定点二进制为实数的整数部分和小数部分分别分配固定位数。二进制小数点分隔两部分，就像十进制中的小数点一样，小数点右侧每一位的权重是2的负次幂。

**二进制小数点** — 分隔二进制实数整数部分（左侧）和小数部分（右侧）的分隔符。小数点右侧各位的权重为 $2^{-1}, 2^{-2}, 2^{-3}...$

*例:* 对于0.101，其值为 $0 \\times 2^0 + 1 \\times 2^{-1} + 0 \\times 2^{-2} + 1 \\times 2^{-3} = 0.625$

**例题:** 将十进制数6.625转换为8位定点二进制数，其中整数部分占5位，小数部分占3位

1. 将数字拆分为整数部分(6)和小数部分(0.625)，分别转换
2. 将整数6转换为5位二进制：
3. $$6 = 110 = 00110$$
4. 对0.625使用乘2取整法，依次取出每次结果的整数部分：
5. $$0.625 \times 2 = 1.25 \rightarrow 1 \\ 0.25 \times 2 = 0.5 \rightarrow 0 \\ 0.5 \times 2 = 1.0 \rightarrow 1$$
6. 合并两部分，二进制小数点在第5位之后：$00110.101$
7. 最终的8位表示（存储时去掉小数点）：00110101

> **考试提示:** 务必确认题目中各部分分配的位数，不要混淆整数部分和小数部分的位数。

## 浮点二进制与规格化

浮点二进制类似于十进制的科学计数法，它将实数拆分为两部分：尾数（存储有效数字）和指数（存储二进制小数点的位置）。对于相同的总位数，浮点二进制可比定点表示支持大得多的数值范围。

**规格化浮点数** — 浮点二进制的标准化格式，通过移除冗余的前导位最大化精度，并确保每个值只有唯一表示。对于补码表示的尾数，前两位必须不同。

**例题:** 对001010 101进行规格化（尾数6位，指数3位，均为二进制补码表示）

1. 原始尾数：001010，前两位均为0，因此未规格化。
2. 将尾数左移1位，二进制小数点随之右移1位，因此我们需要将指数减1以补偿该变化。
3. 移位后的尾数：010100。原始指数101在3位补码中等于-1。
4. 新指数：-1 - 1 = -2，用3位补码表示为110。
5. 检查：尾数前两位为01，二者不同，因此规格化正确。
6. 最终规格化结果：尾数010100，指数110

> **mnemonic**
>
> 正数01开头，负数10开头：这就是补码尾数的规格化规则。

## 十进制与规格化浮点数的相互转换

将十进制实数转换为规格化浮点数时，先将其转换为普通二进制，调整为规格化形式，再拆分为符合要求位长的尾数和指数。反向转换则按相反步骤进行。

**例题:** 将10.25转换为规格化浮点数，尾数8位，指数4位，均为二进制补码表示

1. 将10.25转换为普通二进制：$1010.01$
2. 改写为规格化形式：将二进制小数点移到第一位之后：$1.01001 \times 2^3$
3. 用有效位填充8位补码尾数：0 1 0 1 0 0 1 0 → 01010010
4. 指数3用4位补码表示为：0011
5. 检查规格化：前两位0和1不同，符合要求。最终结果：01010010 0011

**概念自测**

测试你对转换的理解：

1. 规格化数100100 010（尾数6位，指数3位，均为补码表示）对应的十进制值是多少？

   - -1.75
   - -2.25
   - 3.5
   - -0.75

   *解析:* 正确：尾数100100 = -0.875，指数010 = 2，因此 $-0.875 \times 2^2 = -1.75$

## 范围与精度的权衡

分配给尾数和指数的位数直接影响浮点系统的两个核心属性：可存储值的范围，以及存储值的精度。

**范围与精度** — 范围是可存储的最小值（最负）到最大值（最正）的跨度。精度是存储的二进制值与原始真实值的接近程度，由可用的有效位数决定。

**例题:** 比较两个16位浮点系统：系统A（尾数10位，指数6位）和系统B（尾数12位，指数4位）。哪个系统的范围更大？哪个精度更高？

1. 范围由指数长度决定。系统A的指数更长，因此可存储更大范围的值。
2. 精度由尾数长度决定。系统B的尾数更长，因此可存储精度更高、舍入误差更小的值。

> **tip**
>
> 考试几乎总会考察这个权衡关系：记住指数位数越多 = 范围越大，尾数位数越多 = 精度越高。

## 常见错误

- **错误做法:** 将补码存储的指数当作无符号值处理
  - 原因: CIE的大多数题目中，尾数和指数都使用补码，将指数当作无符号处理会得到错误的最终结果
  - 正确做法: 始终确认指数是有符号还是无符号，计算最终值前先将其转换为正确的有符号十进制
- **错误做法:** 规格化时指数调整方向错误
  - 原因: 尾数左移1位会使二进制小数点右移1位，因此指数必须减1，而非加1
  - 正确做法: 规格化完成后，将最终结果转换回十进制，确认其与原始值一致
- **错误做法:** 负补码尾数规格化错误，将前导11当作有效形式
  - 原因: 学生知道负数以1开头，但规格化要求前两位必须不同
  - 正确做法: 遵循记忆口诀：正数01开头，负数10开头，其他任何开头组合都属于未规格化
- **错误做法:** 描述位分配变化的影响时，混淆范围和精度
  - 原因: 学生经常混淆哪部分的位数影响哪个属性
  - 正确做法: 使用记忆挂钩：指数对应范围（英文Exponent和Extent首字母相同），尾数对应精度（Mantissa和Measurement首字母相同）
- **错误做法:** 转换回十进制时，忘记应用尾数的负号
  - 原因: 学生经常只转换尾数的大小，对负值省略符号
  - 正确做法: 始终先检查尾数的最高位，给最终结果加上正确的符号

## 速查表

| 概念 | 核心规则 |
| --- | --- |
| 定点表示 | 整数/小数部分分配固定位数，范围固定且有限 |
| 浮点表示 | 拆分为尾数（有效数字）和指数两部分 |
| 规格化（补码） | 正数=01...，负数=10...，最大化精度 |
| 指数位数增加 | 可存储值的范围增大 |
| 尾数位数增加 | 存储值的精度提高 |
| 十进制 → 浮点数步骤 | 转换为二进制，规格化，拆分为尾数+指数 |

## 下一步

实数的二进制表示是CIE 9618试卷1的核心基础考点，考试中经常出现转换题和范围精度权衡的简答题。掌握规格化和转换规则是在这些高频题中拿到满分的关键。本主题也是进一步学习计算机算术、数据存储和数字媒体表示的基础，这些领域中实数通常以浮点格式处理和存储。接下来，你可以拓展信息表示的知识，学习计算机系统中其他常见数据类型。

- [字符编码](https://www.owlsprep.com/zh/study/cie-9618-u1-character-encoding/)
- [图像的二进制表示](https://www.owlsprep.com/zh/study/cie-9618-u1-binary-representation-of-images/)
- [声音的二进制表示](https://www.owlsprep.com/zh/study/cie-9618-u1-binary-representation-of-sound/)

---

来自 [OwlsPrep](https://www.owlsprep.com) —— A-Level / IB / AP / IGCSE 免费学习指南，依据官方考纲编写。原页面：https://www.owlsprep.com/zh/study/cie-9618-u1-binary-representation-of-real-numbers/
