计算机组成原理笔记(六)——2.2机器数的定点表示和浮点表示

计算机在进行算术运算时,需要指出小数点的位置,根据小数点的位置是否固定,在计算机中有两种数据格式:定点表示和浮点表示。

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} 范围:(12n)X12n
  • 补码定点小数
    范围 : − 1 ≤ X ≤ 1 − 2 − n 范围: -1 \leq X \leq 1 - 2^{-n} 范围:1X12n

示例: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 范围:(2n1)X2n1
  • 补码定点整数
    范围 : − 2 n ≤ X ≤ 2 n − 1 范围: -2^{n} \leq X \leq 2^{n} - 1 范围:2nX2n1

示例:8位定点整数(n=7)

类型最大正数最小正数最大负数(原码)最大负数(补码)
数值01111111 (127)00000001 (1)11111111 (-127)10000000 (-128)

四、关键特性对比

特性定点小数定点整数
精度由小数点后的位数决定由整数位的位数决定
溢出处理结果超出范围时需调整比例因子结果超出范围直接溢出
应用场景低精度科学计算普通整数运算

五、溢出检测与处理

在这里插入图片描述

  • 原码溢出规则:符号位与数值位不匹配时溢出。
  • 补码溢出规则:次高位进位与符号位加减不一致时溢出。

六、典型例题

例1:将十进制数-0.75用8位定点小数补码表示。

  1. 转为二进制:-0.75 = -0.1100₂
  2. 补码表示:符号位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 21M<1
最高有效位必须为1(基数=2时)。例如:

  • 合法规格化:0.1xxx…(二进制)
  • 非法规格化:0.01xx…(需左移调整为0.1xx…)

规格化操作

  • 尾数左移一位,阶码减1(基数2时)。

三、IEEE 754标准详解

类型符号位阶码位数尾数位数偏移量精度(十进制)
单精度1823127~7位
双精度111521023~15位
扩展双精度1156416383~19位

存储格式示意(单精度):
在这里插入图片描述

特殊值处理:

  • 0:阶码全0,尾数全0。
  • 无穷大:阶码全1,尾数全0(符号位决定正负)。
  • NaN:阶码全1,尾数非0。

四、浮点数表示范围

值类型计算公式(单精度)说明
最大正数 ( 2 − 2 − 23 ) × 2 127 (2−2^{−23}) \times 2^{127} (2223)×2127阶码最大,尾数全1
最小正数 2 − 126 × 2 − 23 2^{−126} \times 2^{−23} 2126×223非规格化数
最小规格化正数 2 − 126 2^{−126} 2126阶码最小,尾数全0
最大负数 − ( 2 − 126 ) -(2^{−126}) (2126)符号位为1,阶码最小

范围与精度对比(单精度 vs 双精度):

在这里插入图片描述

五、浮点数运算步骤

  1. 对阶:小阶向大阶对齐,右移尾数并增加阶码差值。
  2. 尾数运算:执行加减法(需处理符号位)。
  3. 规格化:调整尾数为合法形式。
  4. 舍入:按就近舍入(或截断)处理多余位。
  5. 溢出判断:检查阶码是否超出允许范围。

在这里插入图片描述


六、典型问题示例

例1:转换十进制数178.125为IEEE 754单精度

  1. 二进制转换:178.125 = 10110010.001
  2. 规格化:1.0110010001×2⁷
  3. 阶码 = 127+7 = 134(移码:10000110)
  4. 尾数 = 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+2n11
其中,偏移量(Bias)为 ( 2^{n-1} - 1 \),例如:

  • 8位阶码的Bias为127( 2 7 − 1 2^7 -1 271);
  • 11位阶码(双精度)的Bias为1023( 2 10 − 1 2^{10} -1 2101

2. 移码的计算规则

假设阶码真值为 E E E,n位移码的转换步骤如下:

  1. 计算偏移量: Bias = 2 n − 1 − 1 \text{Bias} = 2^{n-1} -1 Bias=2n11
  2. 真值 E E E 加上Bias,转换为无符号整数;
  3. 将结果表示为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=1010102

3. 移码的关键特性

  1. 自然排序性
    移码的真值按二进制自然顺序排列,无需考虑符号位,便于硬件直接比较阶码大小。

  2. 唯一零表示
    真值0的移码为Bias( 7 7 7,示例为4位)。消除±0歧义,便于判断强制零值(阶码全0)。

  3. 与补码的关系
    移码与补码的符号位相反,数值位相同。如:
    补码: [ 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. 移码在浮点数中的优势

  1. 简化对阶操作
    在浮点加减运算中,对阶时可直接比较移码的大小,无需处理符号位,加速硬件电路设计。

  2. 唯一零标准
    IEEE 754规定,阶码全0且尾数全0表示机器零,保证零的唯一性。

  3. 避免溢出错判
    阶码全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=122011110102

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 2kE2k1
    实际范围: r − 2 k ≤ ∣ N ∣ ≤ r 2 k r^{-2^k} ≤ |N| ≤ r^{2^k} r2kNr2k
    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=2r=16
规格化范围±(1-2-23)×2127±(1-2-23)×16127
最小正数2-1×2-128 ≈1e-3816-1×16-128 ≈1e-51
尾数有效二进制位数24位(含隐含1)5.75位(精度显著降低)
分布密度

四、基数选择策略

  1. 大型/巨型机
    选较大r(如16),优先扩大范围,兼顾速度(减少移位)。
  2. 微型/嵌入式系统
    选r=2,保证精度需求,适应有限硬件资源。

不同基数下的规格化过程对比

在这里插入图片描述

此图说明了不同基数下左移操作对阶码的影响差异。例如,二进制(r=2)需逐位移位,而四进制(r=4)每一次移位处理两位,大幅减少调整次数。

五、总结

尾数基数r的选择需要权衡范围、精度和效率

  • 优点:r↑ → 范围扩大,运算速度↑
  • 缺点:r↑ → 精度↓,分布密度↓

理解不同基数的影响有助于在体系结构设计中做出合理选择。例如,科学计算侧重范围(选大r),而财务计算需要高精度(应选r=2)。

2.2.5IEEE754标准浮点数

一、IEEE 754标准概述

IEEE 754是计算机科学中浮点数表示的国际标准,主要用于规范浮点数的格式、运算规则及特殊数值的处理。其核心思想是通过符号位、阶码(指数)、尾数( mantissa) 三部分表示浮点数,并通过规格化非规格化方式优化精度与范围。

二、浮点数格式结构

以32位单精度浮点数为例,结构如下:

符号位(1位)阶码(8位,移码表示)尾数(23位,原码表示)
SEM
  • 符号位(S):0表示正数,1表示负数。
  • 阶码(E):移码表示,偏置值为 2 m − 1 − 1 2^{m-1}-1 2m11(m为阶码位数)。
    • 单精度偏置值: 127 = 2 8 − 1 127 = 2^8 - 1 127=281
    • 双精度偏置值: 1023 = 2 11 − 1 1023 = 2^{11} - 1 1023=2111
  • 尾数(M):原码表示,规格化数最高位隐含1(不存储),非规格化数最高位为0。

三、规格化数与非规格化数

  1. 规格化数

    • 形式: ± 1. x x x x × 2 E \pm 1.xxxx \times 2^E ±1.xxxx×2E
    • 隐含位:尾数最高位1被隐藏,实际有效位数为24位(单精度)/53位(双精度)。
    • 用途:表示大部分正常数值,通过隐藏位提高精度。
  2. 非规格化数

    • 形式: ± 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步:

  1. 对阶

    • 目的:统一阶码,对齐小数点。
    • 方法:小阶码向大阶码看齐,尾数右移(基数为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
  2. 尾数求和

    • 按定点数加法规则运算,考虑进位/借位。
  3. 规格化

    • 左规:结果形如 0.0...01 x . . . 0.0...01x... 0.0...01x...,尾数左移1位,阶码减1。
    • 右规:结果形如 1. x . . . x 1.x...x 1.x...x,尾数右移1位,阶码加1(丢失最高位时舍入)。
  4. 舍入

    • 四种方式:就近舍入(默认)、正向舍入、负向舍入、截断。
    • 示例:尾数 0.00010000... 0.00010000... 0.00010000... → 近似为 0.0001 0.0001 0.0001(截断)或 0.0001 0.0001 0.0001(四舍五入)。
  5. 溢出判断

    • 上溢:正阶码超过最大值(如单精度 > 127 > 127 >127)。
    • 下溢:负阶码低于最小值(如单精度 < − 126 < -126 <126),结果为0。

六、不同精度浮点数对比

类型位数符号位阶码位尾数位(显式)总位数偏置值用途
单精度(float)32182332127广泛应用,精度较低
双精度(double)6411152641023科学计算,高精度
临时浮点数64115646416383扩展精度,无隐含位

七、实例解析

例1:十进制0.15625转IEEE 754单精度

  1. 二进制: 0.0010 1 2 = 1.01 × 2 − 3 0.00101_2 = 1.01 \times 2^{-3} 0.001012=1.01×23
  2. 阶码: E = 127 + ( − 3 ) = 124 → 0111110 0 2 E = 127 + (-3) = 124 \rightarrow 01111100_2 E=127+(3)=124011111002
  3. 尾数:隐含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}) (12n)(12n) − 1 ∼ ( 1 − 2 − n ) -1 \sim (1 - 2^{-n}) 1(12n)
    定点整数 − ( 2 n − 1 ) ∼ ( 2 n − 1 ) -(2^{n} - 1) \sim (2^{n} - 1) (2n1)(2n1) − 2 n ∼ ( 2 n − 1 ) -2^{n} \sim (2^{n} - 1) 2n(2n1)

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 的数。

3. 定点与浮点对比

特性定点表示法浮点表示法
表示范围
精度固定(有限小数位数)可变(牺牲部分精度)
运算复杂度简单(仅整数运算)复杂(需对阶、规格化)
溢出处理数值超范围直接溢出阶码超范围才会溢出

二、定点计算机与浮点计算机

1. 定点计算机

  • 特点

    • 只能处理定点数,无硬件浮点运算单元
    • 浮点运算由软件模拟,效率低。
    • 适用于嵌入式系统或低功耗场景。
  • 结构

    在这里插入图片描述

2. 浮点计算机

  • 特点
    • 浮点运算部件(FPU),支持硬件浮点指令。
    • 直接处理浮点数的加减乘除,效率高。
    • 适用于科学计算、图形处理。
  • 结构
    在这里插入图片描述

三、定点与浮点的选择

  • 定点机适用场景
    • 实时控制(如工业仪表)。
    • 需要高精度整数运算(如财务系统)。
  • 浮点机适用场景
    • 大规模数值计算(如气象模拟)。
    • 需要大范围动态数值(如图形渲染)。

四、IEEE 754 浮点运算的注意事项

  1. 精度问题
    • 浮点数无法精确表示某些十进制小数(如 0.1 + 0.2 ≈ 0.30000000000000004)。
  2. 规格化要求
    • 运算后需判断是否溢出,并进行左规右规
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao--xin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值