浮点数的加减运算(阶码、尾数)

浮点数尾数运算  < ---- >  原码加/减运算

原码:+|x|  或者  -|x|      (正数=0+|x|    负数的=1+|x| )

符号位和数值部分:分开处理

仅对【数值部分】进行加减运算,符号位起判断和控制作用

规则如下:

比较两数符号,对加法实行同号求和,异号求差,对减法实行异号求和,同号求差

求和:数值位相加,和的符号取被加数(被减数)的符号。若最高位产生进位,则结果溢出

求差:被加数(被减数)与加数(减数)求补相加。

a)最高数值位产生进位表明加法结果为正,所得数值位正确。

b)最高数值位没产生进位表明加法结果为负,得到的是数值位的补码形式,需对结果求补,还原为绝对值形式的数值位。

差的符号位:a)情况下,符号位取被加数(被减数)的符号;

  b)情况下,符号位为被加数(被减数)的符号取反。


举个栗子:~

1:已知 [X] = 1.0011[Y] = 1.1010,要求计算[X+Y]

解:由原码加减运算规则知:同号相加,则求和,和的符号同被加数符号。

       所以:和的数值位为:0011 + 1010 = 1101  ALU中无符号数相加)

                  和的符号位为:1

                  [X+Y] = 1.1101  求和:直接加,有进位则溢出,符号同被加数

 

2 :已知 [X] = 1.0011[Y] = 1.1010,要求计算[XY]

解:由原码加减运算规则知:同号相减,则求差(补码减法)

       差的数值位为:0011+(1010)求补 = 0011 + 0110 = 1001

       最高数值位没有产生进位,表明加法结果为负,需对1001求补,还   

       原为绝对值形式的数值位。即:(1001)求补= 0111

       差的符号位为[X]的符号位取反,即:0

                  [XY] = 0.0111     求差:加补码,不会溢出,符号分情况


浮点数阶码运算 < ---- >  移码加/减运算

移码:不管正负,只要将其补码的符号位取反即可。

符号位和数值部分:一起处理

运算公式(假定在一个nALU中进行加法运算)

[E1]+[E2]=2n-1+E1+2n-1+E2=2n+E1+E2=[E1+E2]mod 2n

[E1]–[E2]=[E1]+[–[E2]]=2n-1+E1+2n–[E2]

                            =2n-1+E1+2n–2n-1–E2

                           = 2n+E1–E2 = [E1–E2]mod 2n

 结论:移码的和、差等于和、差的补码!

运算规则

① 加法:直接将[E1][E2]进行模2n加,然后对结果的符号取反。

② 减法:先将减数[E2]求补(各位取反,末位加1),然后再与被减数 [E1]进行模2n相加,最后对结果的符号取反。

③ 溢出判断:进行模2n相加时,如果两个加数的符号相同,并且与和数的符号也相同,则发生溢出。

 


1: 用四位移码计算“7+6)”和“3 + 6”的值。

解:[–7] = 0001       [– 6]= 0010   [–3]= 0101  [6]= 1110

       [–7]+ [–6] = 0001 + 0010 = 0011 (两个加数与结果符号都为0,溢出)

       [3] + [6] = 0101 + 1110 = 0011, 符号取反后为 1011,其真值为+3

       问题:[–7+(–6)]=?           [3+(6)] =  

 

2: 用四位移码计算“7 6)”和“3 5”的值。

解:[–7] = 0001       [– 6]= 0010   [–3]= 0101  [5]= 1101

      [7] [–6] = 0001 + 1110 = 1111, 符号取反后为 0111,其真值为–1

       [3] [5] = 0101 + 0011 = 1000,符号取反后为 0000,其真值为– 8

原文地址:https://www.cnblogs.com/l20902/p/10610920.html