408每年必考:组成原理_数据的表示与运算

教育   2024-11-24 19:00   北京  



以下内容出自《研知识-计算机组成原理精深解读》59页2.4浮点数的表示和运算


计算机组成原理——第2章 数据的表示和运算


1、考点解读


本章内容多、基础知识点多、计算多,属于重点考查的章节,也是后续内容的基础。本章的知识或考点脉络清晰,包括定点数编码、补码加减、原码与补码乘除、浮点数格式、浮点数加法运算、加法器的电路等。



本章最近10年联考考点题型分值统计表



2、浮点数的加/减运算


下面是计算机浮点数的加/减运算的主要步骤,不再讨论可能产生的溢出及其他的问题。主要的步骤有:


(1)检查是否有操作数是0,只要有1个操作数为0,则可以马上得到加减的结果。


(2)检查两个操作数的阶码是否相等。如果不相等,进行阶码对齐操作。将阶码小的数转换为阶码大的数。


(3)把两个尾数进行加法或减法运算,并确定结果的符号。


(4)检查结果是否是规范的浮点数,如果不是规范的浮点数,则进行规范化处理,把结果转换为规范化的浮点数。


提示:实际在进行加法或减法运算前,两个数的有效数分别送入运算器的两个寄存器内,这两个寄存器的位数多于尾数的位数,多于的位数用0填充。这样做的目的是提高运算的精确度。


【例题】假定有一个12位的浮点数表示法。它的形式与IEEE754定义的单精度格式类似。其最高位是1个符号位,后面是5位阶码域,这样阶码域的偏移量是15(24-1),最后6位是尾数域。用该方法表示的该浮点数A=0 10100 011001,B=0 10001 100101。写出计算机执行浮点数加法的过程。


【解答】A=+1.01 1001 × 25  ,B=+1.100101 × 22


(1)由于A的阶码较大,需要调整B的阶码。把B的尾数向右移动3,B的尾数变为0.001100101两个数的阶码都是 5


(2)由于阶码是5,偏移量是 15,5+15=20,因此设置结果的阶码域为10100


(3) 两个数都是正数,执行 AB的尾数的加法运算,得到尾数的和是1.100101101,并设置结果的符号位为正。


(4) 结果1.100101101恰好是规范化的数,不需要进行规范化处理。但是由于只需要保存小数点后面6,因此需要进行舍入处理。结果1.100101 101的最后3位为101(值为5),超过3位表示的值(8)的一半所以需要进行操作,也就是:1.100101的最低位加上1,得到1.100110

结果的浮点表示为:0 10100100110


说明:(1)因为在尾数加法后,结果的小数点前正好有11,说明是规范化的数。如果加法结果不是规范化的数,则需要进行规范化处理


例如,假定尾数加法结果是0.0101 1101 1,小数点前面没有1,说明这不是规范化的数,需要对它进行规范化处理。小数点保持不动,把尾数结果向左移动2,变为1.0111 011,同时把阶码减去2


例如,假定加法结果是10.0101 1101 1,小数点前面有2,说明不是规范化的数,需要进行规范化处理把该值向右移动1,变为1.00101 1101 1,同时阶码加上1


(2)在进行阶码对齐操作时,需要把尾数进行左移或者右移,需要保留完整的尾数,这样在进行尾数的加减运算时,可以提高结果的精确度。得到运算结果后,再把多余的尾数位数去掉。处理尾数多余的位有以下原则:


第一,直接去掉多余的位:


例如,运算结果是 1.10011010,现在只需要保留小数点后面4,则直接去掉后面的 010, 1.1011


第二,·诺依曼舍入:


如果保留位后面全为0,则直接去掉。如果多余位不全为0,则去掉多余位,同时把保留位中最低位设为1


例如,运算结果是1.1011010,现在只需要保留小数点后面4位。多余位是010,则处理的结果是1.1011


例如,运算结果是1.1010010,现在只需要保留小数点后面4位。多余位是010,则处理的结果是1.1011.


第三,IEEE 754 默认原则:


A.如果多余位的值超过多余位能表示的最大值的一半,也就是多余位形如IX…1…XX(1开始后面不全为0),则把保留的最低位加1,去掉多余位。


换个描述就是:假定多余位(m)的值超过2m值的一半,则需要进行操作,给保留的最低位加1


例如,结果为1.11011001,保留小数点后面4,需要去掉的位是1001,它的值为9,4位二进制数可以表示 16 个不同的数,9 超过 8(16的 1/2),需要进行操作。把 1.1101加上 1,得到 1.1110


B.如果多余位的值不到多余位能表示的最大值的一半,也就是多余位形如0X…XX(0开始)则直接去掉多余位。


换个描述就是:假定多余位(m)的值不到2m值的一半,则需要进行舍弃操作,直接去掉多余位。


例如,结果为1.11010111,保留小数点后面4位。需要去掉的是0111,它的值为7,4位二进制数可以表示16个不同的数,7小于8(161/2),需要舍弃。最后得到的结果为 1.1101


C. 如果多余位的值恰好为多余位能表示的最大值的一半,也就是多余位形如10…00(1开始,后面均为0),则这时的处理原则是:需要保证保留的最低位为偶数(也就是0)。也就是说,如果保留的最低位为0,则直接去掉多余位,保留位不变。如果保留的最低位为1,则把保留的最低位加上1,直接去掉多余位。


例如,运算结果为1.11011000,多余位1000的值是8,正好是16的一半。则把 1000 直接去掉。同时由于小数点后为1101,值为13,不是偶数,则需要进行加1,变为14,则结果为 1.1110


运算结果为 1.10101000,多余位1000的值是8,正好是16的一半。则把1000直接去掉。同时,由于小数点后为 1010,值为10,是偶数,则让1010保持不变。则结果为1.1010


3、真题与习题精编


浮点数加、减运算过程一般包括对阶、尾数运算、规格化、舍入和判溢出等步骤。设浮点数的阶码和尾数均采用补码表示,且位数分别为5位和7(均含2位符号位)。若有两个数,则用浮点加法运算的最终结果是()【全国联考 2009


A.00111 1100010     B. 00111 0100010     C. 01000 0010001     D. 发生溢出


【精解】考点为浮点数加法运算。


29/32 化为二进制的方法:29用二进制表示是11101,这是个整数,可以认为小数点在最右边。现在除以 32,就是小数点位置不动,11101向右移动5,则结果就是 0.11101。同理,得到5/8 的表示为:0.101。题目要求阶码和尾数均采用补码表示,且位数分别为5位和7(均含2位符号位)。则,两个数表示形式为:


X:阶码 00111 尾数 00 11101;


Y:阶码 00 101 尾数 00 10100


两个数都是正数,阶码也是正整数。


(1)对阶。我们很容易看出X的阶码大于Y的阶码,需要把Y的阶码变成和X阶码一样大。需要把Y的尾数变小,也就是Y的阶码增加 2,Y的尾数向右移动2位。(这里涉及补码的右移,为方便理解,本书在讲解补码时,使用整数来讲解。这里的尾数是纯小数,用补码表示。可以理解为在右移过程,也保持符号位不变。这里两个尾数都是正数,也使问题简化一点。)对阶后,表示为:阶码00111尾数0000101


(2)尾数相加。由于都是正数,简单一点。


0011101+0000101=0100010,2位是符号位,现在和的高2位不相等,则说明这两个补码相加结果发生溢出。


这里,出题人的目的是想考查浮点数的表示、补码的溢出、浮点数的加法过程。


可以看出,浮点数表示中使用补码,这很麻烦。IEEE754定义的浮点数的表示中没有使用补码,也是为了使问题简化。答案为 D


4、命题研究


本章是本课程的基础与重点,涉及的知识点很多。


首先,考生应该熟练掌握十进制、二进制、十六进制的转换。这三者的转换是计算机的基础知识。补码知识是本章的重点。补码是现代计算机中有符号数的表示形式。历年的全国统考中,补码的表示补码的加减运算、乘法运算出现多次。补码的移位也出现过,补码加减运算后溢出进位 0F、进位 CF的设置也在全国统考中出现过。


海明码知识在全国统考中出现过。CRC校验在计算机网络的课程中也会讲到,在全国统考中没有出现过。奇偶校验是简单的校验方法,会结合串行传输知识进行考查,曾经在全国统考中出现过。


定点数的乘法、除法的算法是固定的,全国统考中没有考过,但从C语言程序的角度曾经考查过。考生可以从C语言的角度解题。


浮点数的概念、浮点数的表示、浮点数的范围在历年全国统考中多次出现,多以单项选择题为主,偶尔出现在综合题中。浮点数的加减运算在全国统考中出现过。这部分知识相对独立,难度中等,也需要考生熟练掌握。



串行加法器与并行加法器在全国统考中没有出现过,74181的应用是固定的知识,但涉及电路,对很多考生来说有难度,所以在全国统考中没有出现过。但需要学生掌握串行加法器的组成、并行加法器的组成,以及这两种加法器的特点。


总之,本章是出题的重点。涉及的知识点多,题型会结合C语言程序来考查,难度中等。需要考生熟练掌握。


5、模拟预测


1、某计算机采用类似IEEE754 单精度的格式表示浮点数。符号位占用1,0代表正数,1代表负数。指数域占用8位。尾数域占用6位。A=100.5,B=-60.25,计算A+B


2、按照IEEE754 的舍入原则,计算下列尾数,只保留小数点后6位的结果。

1.001011 011 1.000101 1100 1.110100 100


6、答案精解


1、【答案精解】


计算过程,为提高精度,尾数小数点后的尾数可以多于6位。


A=110 0100.1=1.1001 001x26

B=-11 1100.01=-1.11100 01 x25


(1)B进行对阶处理。阶码增加1,变为6。尾数向右移动1,变为 -0.11110001


(2)两个尾数进行相减。1.1001 001-0.1111 0001=0.1010 0001


(3)0.10100001不是规格化的数,需要进行规格化处理。0.10100001向左移动1,得到1.01000010。阶码减1,变为5


(4)由于小数点后只保留6,1.01000010的最低2位是10,10的值是2,正好是4的一半, 1.010000的最低位是0,为偶数,则把10直接去掉,最终保留结果是1.010000。在尾数域只存储010000。运算结果为 1.010000x25,就是 40.0


提示:从数学角度计算,A-B=100.5-60.25=40.25,而计算机的运算结果是40.0。可见,计算机进行浮点数运算的结果会出现与真实值的误差,这是正常的。


2、【答案精解】


IEEE 754的舍原则:舍去的位的值不到位的最大值的一半,则舍去;超过一半则加上1;等于一半则使最低保留位为偶数。


1.001011011,需要去掉3,3位的最大值为8(23),0113,小于4,则舍去,得到 1.001011。


1.000101 1100,需要去掉4,4位的最大值为16(24),1100大于8,则把1.000101的最低位加上1,得到 1.000110


1.110100 100,需要去掉3,3位的最大值为8(23),100等于4,由于1.110100的最低位为偶数,100去掉,得到1.110100


研芝士计算机考研
研芝士 | IT类工科上岸模型开创者
 最新文章