注释:阶码和尾数都需要符号位区分正负
例题1:x = 2^-11*0.100101, y = 2^-10*(-0.011110),求x+y
第零步 补码表示
- 对于x来说-11 补码表示为 11011;
 0.100101补码表示为00.100101
- 对于y来说-10补码表示为 10110;
 -0.011110补码表示为11.100010
第一步 阶码对阶
阶码对齐后才能加减。规则是阶码小的向阶码大的数对齐,若阶码相等则不用对阶
因为-11 < -10,所以x数值需要右移,x阶码和数值变为
 10110;0.010010(1)
第二步 尾数相加
 00.010010(1)
+11.100010
=11.110100(1)
第三步 尾数规格
规格化处理:当两个符号位相同(说明运算结果没有溢出),但最高数值位与符号位相同时需要进行左归,此时要把位数连续左移,直到最数值位与符号位数值不同为止。
例2:11.1xxx和00.0xxx的最高数值位与符号位相同,需左归。
11.1xxx左移一位结果为(1)11.xxx,阶码减1;
00.0xxx左移一位结果为(0)00.xxx,阶码减1;
    当两个符号位不相同(说明运算结果溢出),需右归 。
例3:01.xxxx和10.xxxx的两个符号位不相同,需要进行右归。
01.xxxx右移一位结果为00.1xxx,阶码加1;
10.xxxx右移一位结果为11.0xxx,阶码加1;
继续例题1中,11.110100(1) 明显是最高数值位与符号位相同,需左归两次
 第一次11.101001
 第二次11.010010,最后一位补0
阶码由变为10110 减二变为 10100(十进制的-12)
第四步 尾数舍入
这里看要求了,需要说明的是,如果因为舍入造成尾数溢出,需要再进行第三步,将尾数继续规格化
 
例4:	 11.010100(1),使用0舍1入法,
	结果为11.010101
	
	     11.010100(1),使用横置1法,
	结果为11.010101
	
例5:     11.010100(0),使用0舍1入法
	结果为11.010100
	     11.010100(0),使用横置1法,
	结果为11.010101
继续例题1中尾数11.010010无需舍入处理
第五步 阶码溢出
因为第三步 规格化,不论尾数如何变换,都不会造成尾数溢出,只会影响阶码大小,所以当且仅当阶码溢出时才可能抛出异常。
 溢出分为以下两种情况
-  阶码上溢出。正指数(即阶码值)超过了最大允许值。比如阶码用8bit移码表示,正指数却有128,即无法表示(8bit移码中真值表示范围为-126~127,-127的阶码全0表示非规格化数;而-128的阶码全1,表示无穷大)即上溢出。 如果结果为整数,则称为正上溢出;如果结果为负数,则称为负上溢出。这种情况为软件故障,需要引入溢出故障处理程序来处理。 
-  阶码下溢出。一个负指数比最小所允许的数值还要小时,发生下溢出,例如上面例子中用阶码表示-130,小于真值表示范围的最小值,发生下溢出。一般机器把下溢出时的值置为 0。 
继续例题1中阶码未溢出,无需处理,则
 x + y =2^( 1*0100) * (11.010010)
 将补码化为带符号原码
 x + y = 2^(-1100) * (-0.101110)
再来一道例题直接算
例6. x=2^1010*0.1101, y=2^1011*0.1111,求x+y
-  补码表示:x为01010;00.1101 
 -y为01011;00.1111
-  阶码对阶 :x阶码小一位,对阶后x为01011;00.0110(1) 
-  尾数相加: 
 00.0110(1)
 +00.1111
 =01.0101(1)
-  尾数规格: 
 右归一位;阶码加一
 01100;00.1010(11)
-  尾数舍入: 
 这里我们使用0舍1入法
 00.1010(11) 转化为00.1011
-  阶码溢出: 
 这里阶码未溢出,结果为x + y = 2^01100 * (00.1011)
 原码即 x + y = 2^1100 * (0.1011)
若是哪里有理解错误的或写错的地方,望各位读者评论或者私信指正,不胜感激。



















