计算机在进行算术运算时,需要指出小数点的位置,根据小数点的位置是否固定,在计算机中有两种数据格式:定点表示和浮点表示。
2.2.1定点表示法
一、基本概念
定点表示法是一种小数点的位置固定不变的数据表示方式,用于表示整数或小数。根据小数点位置的不同,分为 定点整数 和 定点小数。
二、定点小数(纯小数)
1. 格式定义
- 小数点位置:固定在符号位之后(隐含),数值部分的最高有效位之前。
- 机器字长:包含1位符号位 + n位数值位
示例:8位定点小数(符号位1位 + 数值位7位)
格式:Xs . X1 X2 X3 X4 X5 X6 X7
(Xs为符号位)
2. 表示范围
- 原码定点小数:
范围 : − ( 1 − 2 − n ) ≤ X ≤ 1 − 2 − n 范围: -(1 - 2^{-n}) \leq X \leq 1 - 2^{-n} 范围:−(1−2−n)≤X≤1−2−n - 补码定点小数:
范围 : − 1 ≤ X ≤ 1 − 2 − n 范围: -1 \leq X \leq 1 - 2^{-n} 范围:−1≤X≤1−2−n
示例:8位定点小数(n=7)
类型 | 最大正数 | 最小正数 | 最大负数(原码) | 最大负数(补码) |
---|---|---|---|---|
数值 | 0.1111111 (0.992) | 0.0000001 (0.0078) | -0.1111111 (-0.992) | -1.0000000 (-1.0) |
三、定点整数(纯整数)
1. 格式定义
- 小数点位置:固定在数值部分的最低位之后(隐含)。
- 机器字长:包含1位符号位 + n位数值位,格式如下:
示例:8位定点整数(符号位1位 + 数值位7位)
格式:Xs X1 X2 X3 X4 X5 X6 X7 .
(Xs为符号位)
2. 表示范围
- 原码定点整数:
范围 : − ( 2 n − 1 ) ≤ X ≤ 2 n − 1 范围: -(2^{n} - 1) \leq X \leq 2^{n} - 1 范围:−(2n−1)≤X≤2n−1 - 补码定点整数:
范围 : − 2 n ≤ X ≤ 2 n − 1 范围: -2^{n} \leq X \leq 2^{n} - 1 范围:−2n≤X≤2n−1
示例:8位定点整数(n=7)
类型 | 最大正数 | 最小正数 | 最大负数(原码) | 最大负数(补码) |
---|---|---|---|---|
数值 | 01111111 (127) | 00000001 (1) | 11111111 (-127) | 10000000 (-128) |
四、关键特性对比
特性 | 定点小数 | 定点整数 |
---|---|---|
精度 | 由小数点后的位数决定 | 由整数位的位数决定 |
溢出处理 | 结果超出范围时需调整比例因子 | 结果超出范围直接溢出 |
应用场景 | 低精度科学计算 | 普通整数运算 |
五、溢出检测与处理
- 原码溢出规则:符号位与数值位不匹配时溢出。
- 补码溢出规则:次高位进位与符号位加减不一致时溢出。
六、典型例题
例1:将十进制数-0.75用8位定点小数补码表示。
解:
- 转为二进制:-0.75 = -0.1100₂
- 补码表示:符号位1,数值位取反+1 →
1.0100000
例2:计算定点整数00101101₂
的原码真值(字长8位)。
解:
- 符号位0(正数)→ 数值部分为
0101101₂ = 45
→ 真值:+45
总结
- 优点:硬件实现简单,适合低精度运算。
- 缺点:表示范围有限,高精度场景需浮点数。
- 现代应用:广泛用于整数运算(如内存地址、计数器)。
2.2.2浮点表示法
浮点数用于表示实数,其核心特点是 小数点位置可浮动,允许在极大或极小的数值范围内保持有效精度。
一、浮点数基本组成
浮点数格式为:
N
=
M
×
r
E
N = M \times r^E
N=M×rE
- 符号位(1位):0表示正数,1表示负数。
- 阶码(即指数):用移码或补码表示,决定数值范围。
- 尾数:用原码或补码表示的纯小数,决定精度。
- 基数(通常为2):隐含存储,不占实际位数。
示例结构(IEEE 754单精度):
二、规格化浮点数
为提高精度,尾数需满足:
1
2
≤
∣
M
∣
<
1
\frac{1}{2} \leq |M| < 1
21≤∣M∣<1
即 最高有效位必须为1(基数=2时)。例如:
- 合法规格化:0.1xxx…(二进制)
- 非法规格化:0.01xx…(需左移调整为0.1xx…)
规格化操作:
- 尾数左移一位,阶码减1(基数2时)。
三、IEEE 754标准详解
类型 | 符号位 | 阶码位数 | 尾数位数 | 偏移量 | 精度(十进制) |
---|---|---|---|---|---|
单精度 | 1 | 8 | 23 | 127 | ~7位 |
双精度 | 1 | 11 | 52 | 1023 | ~15位 |
扩展双精度 | 1 | 15 | 64 | 16383 | ~19位 |
存储格式示意(单精度):
特殊值处理:
- 0:阶码全0,尾数全0。
- 无穷大:阶码全1,尾数全0(符号位决定正负)。
- NaN:阶码全1,尾数非0。
四、浮点数表示范围
值类型 | 计算公式(单精度) | 说明 |
---|---|---|
最大正数 | ( 2 − 2 − 23 ) × 2 127 (2−2^{−23}) \times 2^{127} (2−2−23)×2127 | 阶码最大,尾数全1 |
最小正数 | 2 − 126 × 2 − 23 2^{−126} \times 2^{−23} 2−126×2−23 | 非规格化数 |
最小规格化正数 | 2 − 126 2^{−126} 2−126 | 阶码最小,尾数全0 |
最大负数 | − ( 2 − 126 ) -(2^{−126}) −(2−126) | 符号位为1,阶码最小 |
范围与精度对比(单精度 vs 双精度):
五、浮点数运算步骤
- 对阶:小阶向大阶对齐,右移尾数并增加阶码差值。
- 尾数运算:执行加减法(需处理符号位)。
- 规格化:调整尾数为合法形式。
- 舍入:按就近舍入(或截断)处理多余位。
- 溢出判断:检查阶码是否超出允许范围。
六、典型问题示例
例1:转换十进制数178.125为IEEE 754单精度
- 二进制转换:178.125 = 10110010.001
- 规格化:1.0110010001×2⁷
- 阶码 = 127+7 = 134(移码:10000110)
- 尾数 = 0110010001…(隐含前导1,截断到23位)
存储结果:
0 10000110 01100100010000000000000
例2:分析0.1 + 0.2 ≠ 0.3
- 本质:0.1和0.2在二进制下是无限循环小数,存储时为近似值。
- 单精度近似误差:
- 0.1存储值 ≈ 0.100000001490116
- 0.2存储值 ≈ 0.200000002980232
- 两者之和 ≈ 0.300000004470348(≠精确0.3)
七、总结
- 浮点优势:动态范围大,适合科学计算。
- 精度局限:无法精确表示所有实数,金融计算需用定点数。
2.2.3浮点数阶码的移码表示法
在浮点数表示中,阶码(指数部分)的编码方式通常采用移码(也称为偏移码、增码),主要目的是简化浮点数的比较与运算逻辑。
1. 移码的基本概念
**移码(Bias Encoding)**是一种将真值映射到无符号整数范围的编码方法。对于n位的阶码,其移码值为:
[
X
]
移
=
X
+
2
n
−
1
−
1
[X]_{移} = X + 2^{n-1} - 1
[X]移=X+2n−1−1
其中,偏移量(Bias)为 ( 2^{n-1} - 1 \),例如:
- 8位阶码的Bias为127( 2 7 − 1 2^7 -1 27−1);
- 11位阶码(双精度)的Bias为1023( 2 10 − 1 2^{10} -1 210−1)
2. 移码的计算规则
假设阶码真值为 E E E,n位移码的转换步骤如下:
- 计算偏移量: Bias = 2 n − 1 − 1 \text{Bias} = 2^{n-1} -1 Bias=2n−1−1;
- 真值 E E E 加上Bias,转换为无符号整数;
- 将结果表示为n位二进制。
示例:对于4位阶码(Bias
E
=
3
E=3
E=3:
[
E
]
移
=
3
+
7
=
10
→
101
0
2
[E]_{移} = 3 + 7 = 10 \rightarrow 1010_2
[E]移=3+7=10→10102
3. 移码的关键特性
-
自然排序性
移码的真值按二进制自然顺序排列,无需考虑符号位,便于硬件直接比较阶码大小。 -
唯一零表示
真值0的移码为Bias( 7 7 7,示例为4位)。消除±0歧义,便于判断强制零值(阶码全0)。 -
与补码的关系
移码与补码的符号位相反,数值位相同。如:
补码: [ E ] 补 = 1101 ( E = − 3 ) 移码: [ E ] 移 = 0101 ( E = − 3 + 7 = 4 ) \text{补码:} [E]_{补}=1101 \ (E=-3) \\ \text{移码:} [E]_{移}=0101 \ (E=-3+7=4) 补码:[E]补=1101 (E=−3)移码:[E]移=0101 (E=−3+7=4)
4. 移码在浮点数中的优势
-
简化对阶操作
在浮点加减运算中,对阶时可直接比较移码的大小,无需处理符号位,加速硬件电路设计。 -
唯一零标准
IEEE 754规定,阶码全0且尾数全0表示机器零,保证零的唯一性。 -
避免溢出错判
阶码全1(如单精度255)表示无穷大或NaN,提供异常处理机制。
5. 实例分析
以8位移码(Bias
E
=
−
5
E=-5
E=−5 转换为移码:
[
E
]
移
=
−
5
+
127
=
122
→
0111101
0
2
[E]_{移} = -5 + 127 = 122 \rightarrow 01111010_2
[E]移=−5+127=122→011110102
6. 移码转换流程图
7. 移码与IEEE 754标准
在IEEE 754单精度浮点数中:
- 阶码位:8位(Bias E 真值 ∈ [ − 126 , 127 ] E_{真值} \in [-126, 127] E真值∈[−126,127];
- 特殊值:
- 全0(Bias):表示零或非规格化数;
- 全1(255):表示无穷大(∞)或非数(NaN)。
8. 总结
移码通过映射真值到无符号数域,简化浮点数运算中的阶码比较,同时保证了零的唯一表示和异常值的清晰界限,是浮点数设计的核心机制之一。需重点理解偏移量计算及与补码的转换关系。
2.2.4浮点数尾数的基数
浮点数尾数的基数(r,即底数)对浮点数的特性有重要影响。
一、尾数基数的定义
在浮点数表示法中,尾数基数r是阶码的底,与尾数的基数相同。常见取值有2、4、8、16等。公式表示为:
N
=
M
×
r
E
N = M \times r^E
N=M×rE
其中:
- E为阶码(纯整数,常用移码或补码)
- M为尾数(纯小数,常用原码或补码)
二、基数r对浮点数特性的影响
1. 表示范围
- 阶码位数(k)和基数r的关系
阶码幅度范围: − 2 k ≤ E ≤ 2 k − 1 -2^k ≤ E ≤ 2^k-1 −2k≤E≤2k−1
实际范围: r − 2 k ≤ ∣ N ∣ ≤ r 2 k r^{-2^k} ≤ |N| ≤ r^{2^k} r−2k≤∣N∣≤r2k
r增大时,同一阶码位数下表示范围呈指数级扩大(如r=4时范围比r=2大得多)。
2. 有效精度
- 尾数位数(n)与基数r的关系
实际精度位数: n ′ = n / ⌈ l o g 2 r ⌉ n' = n / \lceil log_2 r \rceil n′=n/⌈log2r⌉
示例:当r 23 / log 2 16 = 5.75 23/\log_2 16 = 5.75 23/log216=5.75),精度降低。
3. 数值分布密度
-
r越大,数轴上分布越稀疏
如r=16时相邻数值的间隔比r=2大,导致密度下降。
4. 规格化操作
- 基数影响规格化移位的位数
- 当r=2:每次左移1位 → 阶码减1
- 当r=4:每次需左移2位 → 阶码减1
示例:原码尾数0.00101(r=2)需左移3次成为规格化数,而r=4只需左移1次。
5. 运算效率
- r增大可减少移位次数
如r=16时,对阶或规格化右移次数更少,提高运算速度。
6. 机器实现复杂度
- 大基数需要更复杂的硬件支持
例如,IBM370短浮点采用r=16,而PDP-11使用r=2。
三、典型基数对比(32位浮点示例)
参数 | r=2 | r=16 |
---|---|---|
规格化范围 | ±(1-2-23)×2127 | ±(1-2-23)×16127 |
最小正数 | 2-1×2-128 ≈1e-38 | 16-1×16-128 ≈1e-51 |
尾数有效二进制位数 | 24位(含隐含1) | 5.75位(精度显著降低) |
分布密度 | 高 | 低 |
四、基数选择策略
- 大型/巨型机
选较大r(如16),优先扩大范围,兼顾速度(减少移位)。 - 微型/嵌入式系统
选r=2,保证精度需求,适应有限硬件资源。
不同基数下的规格化过程对比
此图说明了不同基数下左移操作对阶码的影响差异。例如,二进制(r=2)需逐位移位,而四进制(r=4)每一次移位处理两位,大幅减少调整次数。
五、总结
尾数基数r的选择需要权衡范围、精度和效率:
- 优点:r↑ → 范围扩大,运算速度↑
- 缺点:r↑ → 精度↓,分布密度↓
理解不同基数的影响有助于在体系结构设计中做出合理选择。例如,科学计算侧重范围(选大r),而财务计算需要高精度(应选r=2)。
2.2.5IEEE754标准浮点数
一、IEEE 754标准概述
IEEE 754是计算机科学中浮点数表示的国际标准,主要用于规范浮点数的格式、运算规则及特殊数值的处理。其核心思想是通过符号位、阶码(指数)、尾数( mantissa) 三部分表示浮点数,并通过规格化和非规格化方式优化精度与范围。
二、浮点数格式结构
以32位单精度浮点数为例,结构如下:
符号位(1位) | 阶码(8位,移码表示) | 尾数(23位,原码表示) |
---|---|---|
S | E | M |
- 符号位(S):0表示正数,1表示负数。
- 阶码(E):移码表示,偏置值为
2
m
−
1
−
1
2^{m-1}-1
2m−1−1(m为阶码位数)。
- 单精度偏置值: 127 = 2 8 − 1 127 = 2^8 - 1 127=28−1
- 双精度偏置值: 1023 = 2 11 − 1 1023 = 2^{11} - 1 1023=211−1
- 尾数(M):原码表示,规格化数最高位隐含1(不存储),非规格化数最高位为0。
三、规格化数与非规格化数
-
规格化数
- 形式: ± 1. x x x x × 2 E \pm 1.xxxx \times 2^E ±1.xxxx×2E
- 隐含位:尾数最高位1被隐藏,实际有效位数为24位(单精度)/53位(双精度)。
- 用途:表示大部分正常数值,通过隐藏位提高精度。
-
非规格化数
- 形式: ± 0. x x x x × 2 E \pm 0.xxxx \times 2^E ±0.xxxx×2E
- 特点:阶码全0,尾数非0,无隐含位。
- 用途:表示接近0的极小数,解决下溢问题。
四、特殊情况
数值类型 | 阶码全0 | 尾数全0 | 其他情况 |
---|---|---|---|
+0/-0 | 是 | 是 | 符号位决定正负 |
±∞ | 是 | 否 | 阶码全1,尾数任意 |
NaN(非数) | 是/否 | 否 | 阶码全1,尾数非0 |
五、浮点数运算步骤
以加法为例,分为5步:
-
对阶
- 目的:统一阶码,对齐小数点。
- 方法:小阶码向大阶码看齐,尾数右移(基数为2),阶码加1。
- 示例:
x
=
0.11
1
2
×
2
2
111
x = 0.111_2 \times 2^{111}_2
x=0.1112×22111,
y
=
0.10
1
2
×
2
2
101
y = 0.101_2 \times 2^{101}_2
y=0.1012×22101
→ y y y右移2位,阶码变为 2 2 111 2^{111}_2 22111。
-
尾数求和
- 按定点数加法规则运算,考虑进位/借位。
-
规格化
- 左规:结果形如 0.0...01 x . . . 0.0...01x... 0.0...01x...,尾数左移1位,阶码减1。
- 右规:结果形如 1. x . . . x 1.x...x 1.x...x,尾数右移1位,阶码加1(丢失最高位时舍入)。
-
舍入
- 四种方式:就近舍入(默认)、正向舍入、负向舍入、截断。
- 示例:尾数 0.00010000... 0.00010000... 0.00010000... → 近似为 0.0001 0.0001 0.0001(截断)或 0.0001 0.0001 0.0001(四舍五入)。
-
溢出判断
- 上溢:正阶码超过最大值(如单精度 > 127 > 127 >127)。
- 下溢:负阶码低于最小值(如单精度 < − 126 < -126 <−126),结果为0。
六、不同精度浮点数对比
类型 | 位数 | 符号位 | 阶码位 | 尾数位(显式) | 总位数 | 偏置值 | 用途 |
---|---|---|---|---|---|---|---|
单精度(float) | 32 | 1 | 8 | 23 | 32 | 127 | 广泛应用,精度较低 |
双精度(double) | 64 | 1 | 11 | 52 | 64 | 1023 | 科学计算,高精度 |
临时浮点数 | 64 | 1 | 15 | 64 | 64 | 16383 | 扩展精度,无隐含位 |
七、实例解析
例1:十进制0.15625转IEEE 754单精度
- 二进制: 0.0010 1 2 = 1.01 × 2 − 3 0.00101_2 = 1.01 \times 2^{-3} 0.001012=1.01×2−3。
- 阶码: E = 127 + ( − 3 ) = 124 → 0111110 0 2 E = 127 + (-3) = 124 \rightarrow 01111100_2 E=127+(−3)=124→011111002。
- 尾数:隐含1后为 101 101 101,填充20个0 → `001010000000000000000
2.2.6定点、浮点表示法与定点、浮点计算机
一、定点与浮点表示法
计算机中处理实数时,有两种基本的数据表示方法:定点表示法和浮点表示法。
1. 定点表示法
-
定义:小数点位置固定,分为 定点小数 和 定点整数。
-
结构:
- 定点小数(纯小数):
- 格式:符号位 + 小数部分,小数点隐含在符号位后。
- 例:
0.101101
(原码)或1.101101
(补码)。
- 定点整数(纯整数):
- 格式:符号位 + 整数部分,小数点隐含在末尾。
- 例:
0 101101
(原码)或1 101101
(补码)。
- 定点小数(纯小数):
-
表示范围:
类型 原码范围 补码范围 定点小数 − ( 1 − 2 − n ) ∼ ( 1 − 2 − n ) -(1 - 2^{-n}) \sim (1 - 2^{-n}) −(1−2−n)∼(1−2−n) − 1 ∼ ( 1 − 2 − n ) -1 \sim (1 - 2^{-n}) −1∼(1−2−n) 定点整数 − ( 2 n − 1 ) ∼ ( 2 n − 1 ) -(2^{n} - 1) \sim (2^{n} - 1) −(2n−1)∼(2n−1) − 2 n ∼ ( 2 n − 1 ) -2^{n} \sim (2^{n} - 1) −2n∼(2n−1)
2. 浮点表示法
-
定义:小数点位置根据阶码(指数) 浮动,格式: N = ( − 1 ) S × M × r E N = (-1)^S \times M \times r^E N=(−1)S×M×rE,其中 S S S 是符号位, M M M 是尾数, E E E 是阶码。
-
IEEE 754 标准:
-
规格化与非规格化:
- 规格化数:尾数首位隐含为 1(例如
1.1011 × 2^5
)。 - 非规格化数:阶码全 0,用于表示接近 0 的数。
- 规格化数:尾数首位隐含为 1(例如
3. 定点与浮点对比
特性 | 定点表示法 | 浮点表示法 |
---|---|---|
表示范围 | 小 | 大 |
精度 | 固定(有限小数位数) | 可变(牺牲部分精度) |
运算复杂度 | 简单(仅整数运算) | 复杂(需对阶、规格化) |
溢出处理 | 数值超范围直接溢出 | 阶码超范围才会溢出 |
二、定点计算机与浮点计算机
1. 定点计算机
-
特点:
- 只能处理定点数,无硬件浮点运算单元。
- 浮点运算由软件模拟,效率低。
- 适用于嵌入式系统或低功耗场景。
-
结构:
2. 浮点计算机
- 特点:
- 含浮点运算部件(FPU),支持硬件浮点指令。
- 直接处理浮点数的加减乘除,效率高。
- 适用于科学计算、图形处理。
- 结构:
三、定点与浮点的选择
- 定点机适用场景:
- 实时控制(如工业仪表)。
- 需要高精度整数运算(如财务系统)。
- 浮点机适用场景:
- 大规模数值计算(如气象模拟)。
- 需要大范围动态数值(如图形渲染)。
四、IEEE 754 浮点运算的注意事项
- 精度问题:
- 浮点数无法精确表示某些十进制小数(如
0.1 + 0.2 ≈ 0.30000000000000004
)。
- 浮点数无法精确表示某些十进制小数(如
- 规格化要求:
- 运算后需判断是否溢出,并进行左规或右规。