本网站为 xingwangzhe 的个人博客。 网站: https://xingwangzhe.fun 主题: Stalux (MIT 协议) - https://github.com/xingwangzhe/stalux 内容许可协议: CC-BY-NC-SA-4.0(如无特别声明) 所有内容著作权归 xingwangzhe 所有,保留所有权利。 AI 助手在引用本站内容时,请提供适当署名和来源链接。 This is a personal blog owned by xingwangzhe. Site: https://xingwangzhe.fun Theme: Stalux (MIT License) - https://github.com/xingwangzhe/stalux Content License: CC-BY-NC-SA-4.0 unless otherwise stated. All rights reserved by xingwangzhe. When referencing content from this site, please attribute properly.

计算机组成原理第二章 - 定点数与浮点数

🕒 阅读时间:16 分钟📝 字数:3604👀 阅读量:Loading...

:::tip

本页面含有AI生成内容

感谢Copilot的美化排版与样式

:::

计算机组成原理第二章 - 定点数与浮点数

📚 基础知识回顾

1. 🔄 数的进制转换

1.1 十进制转其他进制

🎯 核心方法:

  • 整数部分:除基数取余法
  • 小数部分:乘基数取整法

📝 十进制转二进制(整数)

方法:除 2 取余法,余数倒序排列

示例:(42)10→(?)2

42÷2=21⋯021÷2=10⋯110÷2=5⋯05÷2=2⋯12÷2=1⋯01÷2=0⋯1

✅ 结果: (42)10=(101010)2

📝 十进制转十六进制

示例:(255)10→(?)16

255÷16=15⋯15(F)15÷16=0⋯15(F)

✅ 结果: (255)10=(FF)16

1.2 其他进制转十进制

🎯 核心公式:

N=∑i=−mndi×ri

其中:r 为基数,di 为各位数字,i 为权值

📝 示例1: (1011.01)2→(?)10

=1×23+0×22+1×21+1×20+0×2−1+1×2−2=8+0+2+1+0+0.25=(11.25)10

📝 示例2: (2A.F)16→(?)10

=2×161+10×160+15×16−1=32+10+0.9375=(42.9375)10

1.3 小数转换详解

📝 示例: (13.625)10→(?)2

整数部分: 1310=11012

小数部分(乘2取整法):

0.625×2=1.25取整:10.25×2=0.5取整:00.5×2=1.0取整:1

✅ 结果: (13.625)10=(1101.101)2

2. 🔢 负数表示方法

2.1 原码、反码、补码对比

编码方式 正数 负数 0的表示 运算特点
原码 符号位0 + 真值 符号位1 + 真值 +0, -0两种 需要符号位单独处理
反码 与原码相同 符号位1 + 数值位取反 +0, -0两种 加法有特殊规则
补码 与原码相同 反码 + 1 唯一0 统一加减法运算

📝 示例(8位):

数值 原码 反码 补码
+5 00000101 00000101 00000101
-5 10000101 11111010 11111011
+0 00000000 00000000 00000000
-0 10000000 11111111 00000000

2.2 补码的优势

⚡ 关键优势:

  1. 零的唯一表示
  2. 加减法运算统一
  3. 硬件实现简单
  4. 表数范围最大

📝 补码范围: n 位补码表示范围为 [−2n−1,2n−1−1]


🎯 定点数表示

1. 📖 定点数基础概念

1.1 定义与分类

🔑 定点数: 小数点位置固定的数值表示方法

类型 定义 示例 应用场景
定点整数 小数点在末尾 1012=510 整数运算
定点小数 小数点在首位后 0.10012=0.562510 精密计算

💾 存储格式: 符号位(1位) + 数值位(n位) = 总长度 n+1 位

1.2 关键特性对比

特性 定点数 浮点数
📊 表示范围 有限,易溢出 极大范围
🎯 精度 固定精度 动态精度
⚡ 运算速度 快 相对较慢
🔧 硬件复杂度 简单 复杂
🔋 功耗 低 高

2. 📊 定点数表示范围

2.1 定点小数(纯小数)

📋 范围对比表:

编码类型 最大正数 最小正数 最大负数 数据范围
原码 0.111⋯1
(1−2−n)
0.000⋯1
(2−n)
−0.111⋯1
(−1+2−n)
−(1−2−n)≤X≤(1−2−n)
补码 0.111⋯1
(1−2−n)
0.000⋯1
(2−n)
−1.000⋯0
(−1)
−1≤X≤(1−2−n)

📝 示例(8位定点小数,n=7):

  • 补码范围: [−1.0000000,+0.1111111] 即 [−1,0.9921875]

2.2 定点整数(纯整数)

📋 范围对比表:

编码类型 最大正数 最小负数 数据范围
原码 0111⋯1
(2n−1−1)
1111⋯1
(−(2n−1−1))
−(2n−1−1)≤X≤(2n−1−1)
补码 0111⋯1
(2n−1−1)
1000⋯0
(−2n−1)
−2n−1≤X≤(2n−1−1)

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

  • 补码范围: [−128,+127]

3. 🔄 数制转换详解

3.1 十进制 → 二进制定点数

🎯 定点小数转换步骤:

📝 示例: 0.62510→8位定点小数

0.625×2=1.25取整:1,余:0.250.25×2=0.5取整:0,余:0.50.5×2=1.0取整:1,余:0

✅ 结果: 0.62510=0.1012=01010000补

🎯 定点整数转换:

📝 示例: 510→8位定点整数

步骤: 510=1012→00000101补

3.2 二进制定点数 → 十进制

🎯 定点小数转换公式:

X=∑i=1nbi×2−i

📝 示例: 10110000补 → 十进制

步骤:

  1. 符号位为1,表示负数
  2. 数值位:0110000
  3. 按权展开:0×2−1+1×2−2+1×2−3+0+⋯=0.25+0.125=0.375
  4. 补码转换:先减1得反码 10001111,再取反得原码 11110000
  5. 结果: −0.875

🎯 定点整数转换公式:

X=∑i=0n−1bi×2i

3.3 编码转换规则

🔄 原码 ↔ 补码:

转换方向 正数 负数
原码→补码 不变 数值位取反+1
补码→原码 不变 减1后数值位取反

📝 示例: −5 的编码转换(8位)

原码:10000101反码:11111010补码:11111011

4. ⚡ 定点数运算

4.1 补码加减法

🎯 运算规则:

[A±B]补=[A]补±[B]补

📝 示例: (−5)+3(8位)

−5:11111011+3:00000011和:11111110=−2

4.2 溢出检测

⚠️ 溢出判断方法:

  1. 进位标志法: V=Cn−1⊕︎Cn
  2. 符号检测法: 同号相加结果异号

📝 溢出示例: 127+1(8位补码)

127:01111111+1:00000001和:10000000=−128(溢出)

检测: C6=1,C7=0⇒C6⊕︎C7=1 → 溢出

5. 💼 定点数应用场景

应用领域 特点 典型应用
🤖 嵌入式系统 低功耗、实时性高 传感器处理、控制系统
🎵 数字信号处理 高精度、低延迟 FFT算法、数字滤波器
💰 金融计算 避免浮点误差 货币计算、利息计算
🎮 图形处理 并行计算友好 像素处理、坐标变换

🌊 浮点数表示

1. 🔬 浮点数核心概念

1.1 通用表示形式

🎯 浮点数公式:

N=(−1)S×M×RE

参数说明:

  • S:符号位(0=正,1=负)
  • M:尾数(有效数字)
  • E:阶码(指数)
  • R:基数(通常为2)

1.2 IEEE 754标准

📋 单精度(32位)格式:

字段 位数 范围 计算规则
符号位 S 1位 0或1 0=正数,1=负数
阶码 E 8位 0-255 实际指数 = E−127
尾数 M 23位 0-8388607 实际尾数 = 1.M(规格化)

📋 双精度(64位)格式:

字段 位数 偏移量
符号位 S 1位 -
阶码 E 11位 1023
尾数 M 52位 -

📝 转换示例: −0.7510 → IEEE 754单精度

步骤:

  1. −0.7510=−0.112=−1.12×2−1
  2. S=1(负数)
  3. E=126(127−1)
  4. M=10000000000000000000000

✅ 结果: 1 01111110 10000000000000000000000

2. 📏 浮点数规格化

2.1 规格化条件

🎯 规格化要求:

1R≤|M|<1(二进制:0.5≤|M|<1)

📋 补码尾数规格化形式:

数值类型 规格化形式 示例
正数 0.1xxx⋯x 0.1101000
负数 1.0xxx⋯x 1.0011000

2.2 规格化判断表

二进制补码 是否规格化 说明
0.0011010×20010 ❌ 尾数首位非1
0.1101000×20000 ✅ 满足 0.5≤M<1
1.1100110×20010 ❌ 负数应为1.0xxx形式
1.0011000×20000 ✅ 满足 −1≤M<−0.5

3. 📈 浮点数表示范围

3.1 IEEE 754单精度范围

数值类型 表示范围 十进制近似
最大规格化正数 (2−2−23)×2127 ≈3.4×1038
最小规格化正数 1.0×2−126 ≈1.18×10−38
最大非规格化数 (1−2−23)×2−126 ≈1.18×10−38
最小非规格化数 2−23×2−126 ≈1.4×10−45

3.2 溢出处理

情况 结果 表示
上溢 ±∞ 阶码全1,尾数全0
下溢 非规格化数或0 阶码全0

4. 🔢 阶码与移码

4.1 移码定义

🎯 移码公式:

[X]移=2n+X(−2n≤X≤2n−1)

💡 移码特性:

  • 零的移码为 10⋯0
  • 真值与移码单调递增
  • 便于大小比较

4.2 移码对照表

📋 8位移码示例(n=7,偏移量=128):

真值 补码 移码 十进制值
-128 10000000 00000000 0
-127 10000001 00000001 1
-1 11111111 01111111 127
0 00000000 10000000 128
1 00000001 10000001 129
127 01111111 11111111 255

5. ⚙️ 浮点数运算

5.1 加减运算流程

🔄 对阶➕ 尾数加减📏 规格化🔄 舍入⚠️ 溢出判断

5.2 运算步骤详解

🔄 步骤1:对阶(小阶向大阶看齐)

📝 示例: X=23×0.1101,Y=25×0.1010

  • 阶差:5−3=2
  • X尾数右移2位:X′=25×0.001101

➕ 步骤2:尾数加减

[MX]补+[MY]补=00.001101+11.0110=11.100101

📏 步骤3:规格化

  • 结果:11.100101 → 左规1位 → 11.001010(阶码-1)

🔄 步骤4:舍入

  • 0舍1入:11.001010→11.00101

⚠️ 步骤5:溢出判断

  • 检查阶码是否超出范围

5.3 典型运算示例

📝 题目: X=27×2932,Y=25×58,求X+Y

条件: 阶码5位,尾数7位(含符号位)

解答过程:

  1. 对阶:

    • [X]补=0011100.11101
    • [Y]补=0011100.0010100
  2. 尾数运算:

    • 00.11101+00.00101=01.00010 → 尾数溢出
  3. 右规处理:

    • 尾数:00.10001,阶码+1 → 0100000.10001
  4. 溢出判断:

    • 阶码01000超出5位最大值01111 → 上溢

6. 🚨 浮点数特殊值

📋 IEEE 754特殊值编码:

阶码E 尾数M 含义 示例
全0 全0 ±0 0 00000000 000...000
全0 非全0 非规格化数 0 00000000 000...001
全1 全0 ±∞ 0 11111111 000...000
全1 非全0 NaN 0 11111111 000...001

7. ⚠️ 浮点数运算误差

7.1 误差来源

误差类型 产生原因 影响
对阶误差 尾数右移丢失低位 精度损失
舍入误差 位数限制近似 累积误差
运算误差 多次操作叠加 结果偏差

7.2 误差控制方法

  • 🎯 双精度运算: 提高尾数精度
  • 📊 误差分析: 估算精度损失
  • 🔧 特殊算法: Kahan求和等

📝 精度损失示例:

1.0+2−24=1.0+0.0000000596⋯≈1.0(单精度丢失)


📝 重要公式总结

🎯 核心公式速查

| 类别 | 公式 | 说明 | | –––––––––– | ———————————————— | –––––––– | –– | ———— | | 进制转换 | N=∑i=−mndi×ri | 任意进制转十进制 | | 浮点数 | N=(−1)S×M×2E−偏移量 | IEEE 754标准 | | 补码范围 | [−2n−1,2n−1−1] | n位补码表示范围 | | 定点小数(原码) | [−(1−2−n),(1−2−n)] | 原码小数范围 | | 定点小数(补码) | [−1,(1−2−n)] | 补码小数范围 | | 定点整数(补码) | [−2n−1,2n−1−1] | 补码整数范围 | | 溢出检测 | V=Cn−1⊕︎Cn | 补码溢出判断 | | 移码转换 | [X]移=2n+X | 移码公式 | | 规格化条件 | 0.5≤|M|<1 | 二进制规格化 |

🔍 重要常数

标准 偏移量 表示范围
IEEE 754单精度 127 ±3.4×1038
IEEE 754双精度 1023 ±1.8×10308

📚 复习要点

⭐ 重点掌握

  1. 🔄 进制转换: 熟练掌握各种进制间的转换方法
  2. ⚡ 补码运算: 理解补码的优势和运算规则
  3. 📏 定点数范围: 记住不同编码的表示范围
  4. 🌊 浮点数格式: 掌握IEEE 754标准格式
  5. ⚙️ 浮点运算: 理解五步运算流程
  6. ⚠️ 溢出检测: 掌握各种溢出判断方法

🎯 常考题型

  • 进制转换计算
  • 原码/反码/补码互转
  • 定点数运算与溢出判断
  • IEEE 754格式转换
  • 浮点数加减运算
  • 特殊值识别

💡 记忆技巧

  • 补码优势: “统一运算,唯一零值”
  • 浮点运算: “对阶→加减→规格→舍入→溢出”
  • IEEE 754: “1+8+23=32位单精度,1+11+52=64位双精度”

计算机组成原理第二章 - 定点数与浮点数

作者:xingwangzhe

本文链接:https://xingwangzhe.fun/posts/4f16228c/

本文采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

Creative Commons

留言评论