2.2 机器数的定点与浮点表示
本节是第二章的绝对重点,核心在于理解定点数和浮点数的表示方法、范围、精度,特别是IEEE 754浮点数标准,是考试的重中之重。
基础逻辑与核心概念
1. 定点表示法 (Fixed-point)
- 定义:小数点的位置固定不变。计算机中通常不显式存储小数点。
- 两种形式:
- 定点小数:小数点隐含在符号位之后、数值位之前。表示范围为
。 - 原码表示范围:
- 补码表示范围:
(可以表示-1,但不能表示+1)
- 原码表示范围:
- 定点整数:小数点隐含在数值位之后。
- 原码表示范围:
- 补码表示范围:
- 原码表示范围:
- 定点小数:小数点隐含在符号位之后、数值位之前。表示范围为
易考点:定点数的表示范围是常考题型,特别是补码的非对称范围。
2. 浮点表示法 (Floating-point)
- 目的:在有限的位数内,扩大数的表示范围。
- 格式:一个浮点数
可以表示为: (Mantissa):尾数,决定了数的精度。通常是定点小数。 (Exponent):阶码,决定了数的范围。通常是定点整数。 (Radix):基数,通常是2,并且是隐含的。
3. 规格化浮点数
目的:为了保证浮点数表示的唯一性,并尽可能保留有效位数,提高精度。
规则:调整阶码的大小,使尾数的绝对值保持在特定范围内。
- 基数为2时:
- 原码:要求尾数最高数值位为1,即
。 - 补码:
- 正数:尾数形式为
0.1xxxx... - 负数:尾数形式为
1.0xxxx... - 统一规则:符号位与最高数值位不同。
- 正数:尾数形式为
- 原码:要求尾数最高数值位为1,即
- 基数为2时:
操作:
- 左规 (Left Shift):当尾数绝对值小于
时,尾数左移一位,阶码减1,直到规格化。 - 右规 (Right Shift):当尾数运算发生溢出时(如
01.xxxx或10.xxxx),尾数右移一位,阶码加1。
- 左规 (Left Shift):当尾数绝对值小于
4. 阶码的移码表示
- 目的:便于浮点数的大小比较和对阶操作。
- 定义:将真值加上一个固定的偏置值 (bias)。
通常,如果阶码有 位,偏置值取 。 - 特点:
- 移码的最高位表示符号,
1为正,0为负,与原码、补码相反。 - 移码的大小直接反映了真值的大小,可以直接按无符号数规则比较大小。
- 移码和补码的关系:符号位相反,其余位相同。
- 移码的最高位表示符号,
5. IEEE 754 标准 (核心难点与高频考点)
这是现代计算机通用的浮点数标准,必须熟练掌握。
格式:
- S (Sign):符号位,1位。
- E (Exponent):阶码,用移码表示,但偏置值与标准移码不同。
- M (Mantissa):尾数,用原码表示,且使用隐藏位技术。
两种常见格式:
- 短浮点数 (Single-precision, 32位):
- 1位符号位 (S)
- 8位阶码 (E):偏置值为 127。阶码真值 = E - 127。
- 23位尾数 (M)
- 真值表示:
(注意隐藏的整数 1)
- 长浮点数 (Double-precision, 64位):
- 1位符号位 (S)
- 11位阶码 (E):偏置值为 1023。阶码真值 = E - 1023。
- 52位尾数 (M)
- 短浮点数 (Single-precision, 32位):
转换步骤 (十进制转IEEE 754):
- 将十进制数转为二进制。
- 移动小数点,进行规格化,形式为
。 - 确定S:正数为0,负数为1。
- 计算阶码E:
(短浮点bias=127,长浮点bias=1023)。 - 获取尾数M:取规格化后二进制小数部分,不足位在末尾补0。
特殊值:
- 阶码 E 全为 0:
- 尾数 M 全为 0:表示
。 - 尾数 M 不为 0:表示非规格化数。
- 尾数 M 全为 0:表示
- 阶码 E 全为 1:
- 尾数 M 全为 0:表示
(无穷大)。 - 尾数 M 不为 0:表示 NaN (Not a Number)。
- 尾数 M 全为 0:表示
- 阶码 E 全为 0:
难点与考点:
- 习题通常要求进行十进制与IEEE 754格式之间的相互转换。
- 要特别注意隐藏位
1的存在,以及阶码的偏置值不是而是 。 - 对特殊值的判断和表示也是考查点。