01、数制补码与定点浮点运算
这一部分对应课程目标 1 中的前三个重点:
定点加减法运算定点乘法运算浮点加减法运算课程总结还特别提醒:课程先导基本知识包括进制转换、真值/补码的相互转换。课堂截图前几次课也大量出现真值、机器数、原码、补码、浮点规格化例题,所以这部分基本可以认为是计算题基础。
教材查阅:数的机器码、定点数和浮点数表示见第 18-29 页;定点加减法见第 57-61 页;定点乘法见第 66-72 页;浮点加减法见第 78-81 页。
一、真值、机器数和常见编码
Section titled “一、真值、机器数和常见编码”教材查阅:第 18-23 页,重点看 2.2.1“数的机器码表示”。
真值就是带正负号的实际数值。
例如:
+1011-1011+0.1011-0.1011真值强调数学意义,符号直接写成 + 或 -。
2. 机器数
Section titled “2. 机器数”机器数是计算机内部存储的二进制编码。机器数通常把符号也编码进二进制位中。
常见约定:
最高位为符号位0 表示正数1 表示负数例如 8 位机器数:
0000 1011如果按原码理解,它表示 +11。
1000 1011如果按原码理解,它表示 -11。
注意:同一个二进制串按不同编码解释,数值可能不同。所以考试必须看清题目要求是原码、反码还是补码。
例题1:数制转换
Section titled “例题1:数制转换”将十进制数 转换为二进制和十六进制。
整数部分:
所以:
小数部分用乘 2 取整:
取整数位 ,余 。
取整数位 ,余 。
取整数位 ,余 。
所以:
合起来:
二进制转十六进制,从小数点两侧分别每 4 位分组:
因此:
二、原码、反码、补码
Section titled “二、原码、反码、补码”原码规则:
符号位表示正负数值位表示绝对值例如 8 位原码:
+5 = 0000 0101-5 = 1000 0101原码的优点是直观,缺点是不方便做加减运算,并且有 +0 和 -0 两种表示。
反码规则:
正数反码 = 原码负数反码 = 符号位不变,数值位逐位取反例如 8 位:
+5 原码 = 0000 0101+5 反码 = 0000 0101
-5 原码 = 1000 0101-5 反码 = 1111 1010反码也有 +0 和 -0 的问题。
补码规则:
正数补码 = 原码负数补码 = 反码 + 1例如 8 位:
+5 补码 = 0000 0101
-5 原码 = 1000 0101-5 反码 = 1111 1010-5 补码 = 1111 1011补码最重要的优点是:
减法可以转换为加法符号位可以一起参与运算0 的表示唯一所以计算机中定点整数加减通常使用补码。
例题2:原码、反码、补码
Section titled “例题2:原码、反码、补码”用 8 位机器数表示 的原码、反码和补码。
先写出 :
所以:
负数原码:符号位为 ,数值位不变。
负数反码:符号位不变,数值位取反。
负数补码:反码加 。
答案:
三、补码范围
Section titled “三、补码范围”教材查阅:第 23-25 页,重点看 2.2.2“定点数表示”。
1. n 位补码整数范围
Section titled “1. n 位补码整数范围”若机器字长为 n 位,其中 1 位符号位,补码整数范围是:
例如 8 位补码整数:
即:
容易错的点:
补码负数比正数多表示一个最小负数8位补码最小值是 -128,不是 -1272. 定点小数补码范围
Section titled “2. 定点小数补码范围”如果是 1 位符号位加 n 位小数位,补码定点小数范围为:
例如 1 位符号位加 7 位小数位:
四、补码加减法
Section titled “四、补码加减法”教材查阅:第 57-59 页,重点看 3.2.1“补码加减法运算方法”。
1. 基本思想
Section titled “1. 基本思想”补码加法:
补码减法:
也就是说,减法先把减数变成相反数的补码,再做加法。
2. 补码加减的一般步骤
Section titled “2. 补码加减的一般步骤”做题时可以按下面写:
- 根据题目位数写出 和 。
- 如果是减法,先求 。
- 按二进制加法相加,符号位一起参加运算。
- 舍弃最高进位。
- 根据符号位和溢出规则判断结果是否正确。
- 若无溢出,把补码结果转换成真值。
五、变形补码和溢出判断
Section titled “五、变形补码和溢出判断”教材查阅:第 59-61 页,重点看 3.2.2“溢出及检测”。
课程总结特别强调:掌握补码加减法及溢出判断过程,尤其是变形补码。
变形补码也叫双符号位补码,用两个符号位表示结果符号和溢出情况。
课程总结给出的判断表:
| 双符号位 | 含义 |
|---|---|
| 00 | 结果为正数,无溢出 |
| 01 | 正溢,也叫上溢 |
| 10 | 负溢,也叫下溢 |
| 11 | 结果为负数,无溢出 |
记忆方法:
两个符号位相同:无溢出两个符号位不同:有溢出01:正数方向溢出10:负数方向溢出例题模板:补码加法
Section titled “例题模板:补码加法”题目类型:
已知 x 和 y,求 x+y,并判断是否溢出。答题模板:
第一步:写出 x、y 的补码。第二步:进行补码加法。第三步:观察双符号位。第四步:判断是否溢出。第五步:若无溢出,转换为真值。如果双符号位是 01 或 10,就不要再硬解释成普通结果,应先写溢出。
例题3:补码加法与溢出判断
Section titled “例题3:补码加法与溢出判断”用 8 位补码计算 ,并判断是否溢出。
先写补码:
相加:
两个加数都是正数,符号位都是 ,但结果符号位为 ,说明正数加正数得到负数,发生正溢出。
也可以从表示范围判断。8 位补码整数范围为:
而:
所以超出表示范围。
答案:机器结果为 ,但发生正溢出,不能表示正确真值 。
六、定点乘法
Section titled “六、定点乘法”教材查阅:第 66-72 页,重点看 3.3“定点乘法运算”、3.3.3“阵列乘法器”、3.3.4“补码阵列乘法器”。
课程总结列出四种乘法:
- 原码一位乘法。
- 补码一位乘法。
- 带求补器的补码阵列乘法器。
- 直接补码阵列乘法。
其中要求“了解”的是原码一位乘法、补码一位乘法;要求“掌握”的是两种补码阵列乘法。
1. 定点乘法最容易错什么
Section titled “1. 定点乘法最容易错什么”定点乘法不是只看乘出来的数,考试最容易扣分的是:
补码位数写错结果位数写错符号位是否参与运算搞错最高位权值搞错最后真值没写课程总结特别提醒:注意位数,尤其是计算结果位数。
2. 带求补器的补码阵列乘法器
Section titled “2. 带求补器的补码阵列乘法器”基本过程:
- 先求出 、 的补码。
- 符号位单独运算。
- 算前求补:对负数的数值部分求补,正数不求补。
- 阵列乘法只让数值位参与运算。
- 根据符号位异或结果判断乘积符号。
- 若结果为负,算后求补。
- 写出最终乘积补码和真值。
符号位规则:
即:
同号为正异号为负结果位数:
3. 直接补码阵列乘法
Section titled “3. 直接补码阵列乘法”直接补码阵列乘法与带求补器方法不同,关键在于:
符号位含权,并且和数值位一起参加运算课程总结强调:
- 先求补码。
- 符号位和数值位一起参与运算。
- 结果位数等于被乘数位数加乘数位数。
- 最高位含权,其它位不含权。
- 最高 2 位为符号位。
直接补码阵列乘法中的特殊规则:
乘法规则:
这里的 (1) 不是普通的 1,而是带负权的符号位含义。考试如果出现直接补码阵列乘法,必须按老师课件规则写,不要按普通无符号乘法硬算。
例题4:定点乘法结果位数
Section titled “例题4:定点乘法结果位数”用 8 位补码表示两个整数相乘:。写出真值结果和 16 位补码结果。
先算真值:
16 位正数 为:
求 的 16 位补码,先取反:
再加 :
答案:
16 位补码结果为:
注意:两个 8 位数相乘,结果通常按 16 位保存。
七、浮点数加减法
Section titled “七、浮点数加减法”教材查阅:第 25-29 页看浮点数表示;第 78-81 页看 3.5.1“浮点加减法运算”。
课程总结明确要求掌握浮点加减过程:
- 运算前规格化。
- 对阶。
- 尾数运算。
- 结果规格化。
- 舍入处理。
- 溢出判断。
1. 浮点数一般形式
Section titled “1. 浮点数一般形式”浮点数一般可以写成:
其中:
- 是尾数。
- 是阶码。
- 是基数,二进制通常为 2。
可以理解为:
尾数决定有效数字阶码决定小数点位置2. 运算前规格化
Section titled “2. 运算前规格化”规格化的目的是让浮点数表示唯一,并尽量保留有效位。
二进制规格化常见形式:
尾数最高有效位要满足规定形式如果尾数不是规格化数,需要先调整尾数和阶码。
浮点加减必须先让两个数阶码相同。
规则:
小阶向大阶对齐尾数右移阶码加 1为什么是小阶向大阶?
因为如果大阶向小阶对齐,尾数要左移,可能造成有效位溢出;小阶向大阶时尾数右移,只是损失低位精度,更符合浮点运算规则。
4. 尾数加减
Section titled “4. 尾数加减”对阶后,阶码相同,就可以对尾数进行定点加减。
公式理解:
所以尾数运算本质上就是定点加减法。
5. 规格化处理
Section titled “5. 规格化处理”尾数运算后可能不再规格化,需要调整。
如果尾数绝对值太小,最高有效位不满足规格化要求,就左移尾数,同时阶码减 1。
可以记成:
尾数左移一位,阶码减一如果尾数运算后产生溢出,需要尾数右移,同时阶码加 1。
可以记成:
尾数右移一位,阶码加一6. 舍入处理
Section titled “6. 舍入处理”尾数右移或规格化后,可能丢失低位,需要舍入。
常见舍入方法:
- 截断法。
- 0 舍 1 入。
- 恒置 1 法。
考试若没有特别要求,按题目给出的舍入规则做。
7. 溢出判断
Section titled “7. 溢出判断”浮点数溢出主要看阶码。
阶码超过最大值:上溢阶码小于最小值:下溢注意:尾数溢出不一定是最终溢出,因为可以通过右规调整;阶码溢出才是真正的浮点范围溢出。
例题5:浮点加法
Section titled “例题5:浮点加法”计算:
求 。
第一步,对阶。小阶向大阶对齐, 的阶码从 对到 ,尾数右移 位:
第二步,尾数相加:
第三步,规格化。结果已经是 形式,不需要左规或右规。
所以:
答案:
八、浮点加减答题模板
Section titled “八、浮点加减答题模板”遇到浮点加减题,建议固定写成:
1. 检查两个操作数是否规格化。2. 比较阶码,进行对阶,小阶向大阶对齐。3. 对尾数进行加法或减法。4. 对结果尾数进行规格化,必要时左规或右规。5. 按题目要求舍入。6. 判断阶码是否溢出。7. 写出最终浮点结果。流程图:
flowchart TD A["开始:两个浮点数"] --> B["检查是否规格化"] B --> C["比较阶码"] C --> D["对阶:小阶向大阶对齐,尾数右移"] D --> E["尾数加/减"] E --> F{"尾数是否规格化?"} F -->|否,太小| G["左规:尾数左移,阶码减 1"] F -->|否,溢出| H["右规:尾数右移,阶码加 1"] F -->|是| I["舍入处理"] G --> F H --> I I --> J{"阶码是否溢出?"} J -->|是| K["报告上溢/下溢"] J -->|否| L["写出最终结果"]这张图的核心记忆点是:
先对阶,再尾数运算;尾数不规格化就左规/右规;最后才舍入和判断阶码溢出。九、新增题库高频补充
Section titled “九、新增题库高频补充”这一部分来自新增的作业和测验题,主要是闭卷中很容易被拿来做选择、填空和短计算的小知识点。
移码常用于浮点数的阶码表示。它可以理解为在补码基础上把符号位取反,也可以理解为给真值加上一个固定偏置。
以 16 位机器数为例,若真值为 ,则:
常见编码为:
| 编码 | 结果 |
|---|---|
| 原码 | |
| 反码 | |
| 补码 | |
| 移码 |
考试记忆点:
补码符号位取反,就是移码。2. 逻辑右移和算术右移
Section titled “2. 逻辑右移和算术右移”逻辑右移不管符号,左边补 ;算术右移要保持符号,左边补符号位。
例如 8 位数:
逻辑右移 1 位:
算术右移 1 位:
原因是原数最高位为 ,算术右移要继续补 ,保持负数符号。
3. 变形补码判断溢出的题型
Section titled “3. 变形补码判断溢出的题型”变形补码使用双符号位,判断规则非常适合闭卷背诵:
| 双符号位 | 含义 |
|---|---|
| 正数,无溢出 | |
| 正溢出 | |
| 负溢出 | |
| 负数,无溢出 |
如果题目问“如何判断溢出”,不要只说“看符号位”,要说清楚:
两个符号位相同表示没有溢出;两个符号位不同表示发生溢出。4. 一位乘法和阵列乘法
Section titled “4. 一位乘法和阵列乘法”一位乘法题通常考“每次看乘数最低位,决定是否加被乘数,然后移位”。阵列乘法器则更偏硬件结构,强调用多个全加器并行形成部分积并累加。
简单区分:
| 项目 | 一位乘法 | 阵列乘法 |
|---|---|---|
| 思想 | 逐位判断、逐步累加 | 部分积并行形成、阵列累加 |
| 速度 | 较慢 | 较快 |
| 硬件 | 较少 | 较多 |
| 常考点 | 手算过程 | 结构特点、适合硬件实现 |
如果题目只是让“说明阵列乘法器的特点”,可以答:
阵列乘法器通过形成多个部分积,并利用规则排列的加法器阵列并行完成累加,速度较快,但硬件开销较大。十、本章最容易混淆的点
Section titled “十、本章最容易混淆的点”1. 原码、反码、补码不要混
Section titled “1. 原码、反码、补码不要混”正数:原码 = 反码 = 补码负数:反码是数值位取反,补码是反码加 12. 补码加法最高进位要舍弃
Section titled “2. 补码加法最高进位要舍弃”补码加法中如果超出机器字长,最高进位通常舍弃。
3. 双符号位不同就是溢出
Section titled “3. 双符号位不同就是溢出”00:正数,无溢出01:正溢10:负溢11:负数,无溢出4. 浮点对阶方向别写反
Section titled “4. 浮点对阶方向别写反”一定是:
小阶向大阶对齐尾数右移阶码增大5. 定点乘法重点看位数
Section titled “5. 定点乘法重点看位数”乘法题不是只算数值,结果位数、符号位是否参与、最终补码形式都要写。