一 真题2009-13
13 浮点数加、减运算过程一般包括对阶、尾数运算、规格化、舍入和判断溢出等步骤。设浮点数的阶码和尾数均采用补码表示,且位数分别为5位和7位(均含2位符号位)。若有两个数X=2^7 (2的7次方) * 29 /32 ,Y= 2^5(2的5次方) * 5 /8,则用浮点加法计算X+Y 的最终结果是()。
A. 00111 1100010
B. 00111 0100010
C. 01000 0010001
D. 发生溢出
二 读题
本题的解题思路题目中已给,即先用浮点数表示X和Y,然后对阶、尾数运算、规格化、舍入和判断溢出
三 哔哔详解
3.1 将X 和Y 表示为题目规定的浮点数格式
3.1.1 X的浮点数
29 的二进制 11101,则29/32 等0.11101,又因为7的二进制111
故X的浮点数00,111;00,11101 其中阶码是7
3.1.2 Y 的浮点数
5的二进制101,则5/8 等于0.101,故Y 的浮点数00,101;00,10100 其中阶码是5
3.2 对阶(阶码相同)
- 阶码 X = 7,阶码 Y = 5
- 阶差 = 7 - 5 = 2
- 将 Y 的尾数右移 2 位(小阶向大阶看齐)
Y 原尾数:00 10100(= 0.10100)
右移 2 位(算术右移,符号位扩展):
-
移位后:
00 00101(低位00被移出,可能需要舍入,但先保留)因此Y的机器数变为00,111;00,00101
3.3 尾数相加
X_mant = 00 11101
+ Y_mant = 00 00101
-------------------
Sum = 01 00010
结果符号位01 ,所以需要右规
3.4 规格化(右规)
因为尾数 ≥ 1(01.xxxxx),需右移 1 位 ,同时阶码 +1
- 尾数右移 1 位(算术右移):
01 00010→00 10001(高位补 0,因为是正数)
- 阶码原为 7 → 7 + 1 = 8
3.5 溢出检测
阶码格式:5 位,含 2 位符号位 ,3位数字位→ 即阶码也是补码,格式为 SS xxx
3位数字位 的补码表示范围是-8到7,现在阶码是8 大于7 ,故阶码溢出。
综上本题选D
四 参考答案
参考答案 D
五 考点精析
5.1 浮点数的加减运算
假设有两个浮点数A和B进行相加或相减,运算过程如下:
第一步: 解析浮点数
读取两个浮点数的符号位、阶码和尾数。
第二步:对阶
如果两个数的阶码不同,需要将较小的阶码的数向右移动尾数,使其阶码与较大的对齐。右移时,最高位补0(正数)或1(负数,补码表示)。
对阶的目的是让两个数的二进制小数点对齐,以便进行加减运算。
第三步:尾数加减
如果符号相同,直接尾数相加;如果符号不同,用绝对值较大的尾数减去较小的尾数,结果的符号由绝对值较大的数决定。
第四步:规格化
- 如果尾数发生进位(超出1.xxxxxx形式):右移1位,同时阶码加1(可能导致阶码上溢)。
- 如果尾数发生左移(小于1.xxxxx):左移直到最高位为1,同时阶码减1(可能导致阶码下溢)。
第五步:舍入
IEEE 754 采用就近舍入,即
- 若尾数超出精度范围,可能需要向最接近的值舍入。
- 若进位影响阶码,则可能导致阶码溢出。
第六步:溢出检测
- 阶码上溢:若计算后阶码超出最大可表示值,则返回无穷大
- 阶码下溢:若计算后阶码低于最小可表示值,则返回0。
5.2 补码表示范围
对于 n 位二进制补码(含 1 位符号位):
范围=[−2n−1−2^{n−1}−2n−1, 2n−12^{n−1}2n−1−1]
| 位数 n | 最小值(十进制) | 最大值(十进制) | 说明 |
|---|---|---|---|
| 8 | -2\^7 = -128 | 2\^7 - 1 = 127 | char |
| 16 | -32768 | 32767 | short |
| 32 | -2\^{31} | 2\^{31} - 1 | int |
| 64 | -2\^{63} | 2\^{63} - 1 | long |
特点:
- 负数比正数多一个(因为 0 占用了一个正数编码)
- 最高位为符号位:0 表示非负,1 表示负
六 考点跟踪
暂无
说明 :本文内容基于公开资料整理,参考了包括但不限于《数据结构》(严蔚敏)、《计算机操作系统》(汤小丹)、《计算机网络》(谢希仁)、《计算机组成原理》(唐朔飞)等国内高校经典教材,以及其他国际权威著作。同时,借鉴了王道、天勤、启航等机构出版的计算机专业考研辅导系列丛书 中的知识体系框架与典型题型分析思路。文中所有观点、例题解析及文字表述均为作者结合自身理解进行的归纳与重述,未直接复制任何出版物原文。内容仅用于学习交流,若有引用不当或疏漏之处,敬请指正。