本网站为 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.

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

🕒 阅读时间:15 分钟📝 字数:5659👀 阅读量:Loading...

:::tip

本页面含有AI生成内容

感谢Copilot的美化排版与样式

:::

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

📚 基础知识回顾

1. 🔄 数的进制转换

1.1 十进制转其他进制

🎯 核心方法:

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

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

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

示例(42)10(?)2

42÷2=21021÷2=10110÷2=505÷2=212÷2=101÷2=01

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

📝 十进制转十六进制

示例(255)10(?)16

255÷16=1515(F)15÷16=015(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×21+1×22=8+0+2+1+0+0.25=(11.25)10

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

=2×161+10×160+15×161=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 位补码表示范围为 [2n1,2n11]


🎯 定点数表示

1. 📖 定点数基础概念

1.1 定义与分类

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

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

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

1.2 关键特性对比

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

2. 📊 定点数表示范围

2.1 定点小数(纯小数)

📋 范围对比表:

编码类型 最大正数 最小正数 最大负数 数据范围
原码 0.1111
(12n)
0.0001
(2n)
0.1111
(1+2n)
(12n)X(12n)
补码 0.1111
(12n)
0.0001
(2n)
1.0000
(1)
1X(12n)

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

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

2.2 定点整数(纯整数)

📋 范围对比表:

编码类型 最大正数 最小负数 数据范围
原码 01111
(2n11)
11111
((2n11))
(2n11)X(2n11)
补码 01111
(2n11)
10000
(2n1)
2n1X(2n11)

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

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

3. 🔄 数制转换详解

3.1 十进制 → 二进制定点数

🎯 定点小数转换步骤:

📝 示例: 0.625108位定点小数

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

🎯 定点整数转换:

📝 示例: 5108位定点整数

步骤: 510=101200000101

3.2 二进制定点数 → 十进制

🎯 定点小数转换公式:

X=i=1nbi×2i

📝 示例: 10110000 → 十进制

步骤:

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

🎯 定点整数转换公式:

X=i=0n1bi×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=Cn1⊕︎Cn
  2. 符号检测法: 同号相加结果异号

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

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

检测: C6=1,C7=0C6⊕︎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 实际指数 = E127
尾数 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×21
  2. S=1(负数)
  3. E=1261271
  4. M=10000000000000000000000

✅ 结果: 1 01111110 10000000000000000000000

2. 📏 浮点数规格化

2.1 规格化条件

🎯 规格化要求:

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

📋 补码尾数规格化形式:

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

2.2 规格化判断表

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

3. 📈 浮点数表示范围

3.1 IEEE 754单精度范围

数值类型 表示范围 十进制近似
最大规格化正数 (2223)×2127 3.4×1038
最小规格化正数 1.0×2126 1.18×1038
最大非规格化数 (1223)×2126 1.18×1038
最小非规格化数 223×2126 1.4×1045

3.2 溢出处理

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

4. 🔢 阶码与移码

4.1 移码定义

🎯 移码公式:

[X]=2n+X(2nX2n1)

💡 移码特性:

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

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.1101Y=25×0.1010

  • 阶差:53=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.00101011.00101

⚠️ 步骤5:溢出判断

  • 检查阶码是否超出范围

5.3 典型运算示例

📝 题目: X=27×2932Y=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+224=1.0+0.00000005961.0(单精度丢失)


📝 重要公式总结

🎯 核心公式速查

| 类别 | 公式 | 说明 | | –––––––––– | ———————————————— | –––––––– | –– | ———— | | 进制转换 | N=i=mndi×ri | 任意进制转十进制 | | 浮点数 | N=(1)S×M×2E偏移量 | IEEE 754标准 | | 补码范围 | [2n1,2n11] | n位补码表示范围 | | 定点小数(原码) | [(12n),(12n)] | 原码小数范围 | | 定点小数(补码) | [1,(12n)] | 补码小数范围 | | 定点整数(补码) | [2n1,2n11] | 补码整数范围 | | 溢出检测 | V=Cn1⊕︎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 国际许可协议进行许可。

留言评论