1、Chapter31.1.溢出判断与变形补码【例 2】:x=+0.1011,y=+0.0110,求 x+y。解: x 补 =0.1011, y补 =0.0110x+y 补 = x补 + y补 =0.1011+ 0.0110=1.0001 x+y= -0.1111 (出错,正溢出)【例 3】:x=1010,y= 1101,求 x+y。解: x 补 =10110, y补 =10011x+y 补 = x补 + y补 =10110+10011= 1 01001 x+y= +1001 (出错,负溢出)【例】:x0.1010,y0.1001,求 xy?(采用变形补码的方法判溢出)解:x 变形补 00.101
2、0,y 变形补 00.1001 s变形补 x y 变形补 00.101000.1001OVR=sf1sf21 溢出!【练习】1. 分别用三种判别溢出的方法判别下列运算是否发生溢出。x0.1001,y0.0101,求 xy? 不溢出x0.1101,y0.1011,求 xy? 出错,负溢出2.原码的一位乘法【例 2】:x+1001,y-0111 ,求 xy?xy-00111111【例 3】:x+0.11101,y+0.10011,求 xy?xy+0.10001001113.补码的一位乘法= 过程【例 2】:x+1001,y-0111 求 xy?xy-00111111【例 3】:x+0.11101,
3、y+0.10011 求 xy?xy+0.10001001114.原码不恢复除法【前例】:x=+0.1011,y=-0.1101,求 x/y=?商 q=-0.1101,余数 r=+0.00000111【前例】:x=0.10110,y= 0.11011,求 x/y=?q=+0.11010 ,r=-0.00000 00010【练习】:x=0.1101,y= 0.1111,求 x/y=?q=-0.1101 ,r=-0.0000 11015.舍入方法【例】: S补=0.10011 ,则1) S补= 0.01001 1截断法:= 0.010010 舍 1 入法:=0.01010末位恒置 1 法:= 0.0
4、1001 2) S补= 0.00010 011截断法: = 0.000100 舍 1 入法:=0.00010末位恒置 1 法:= 0.000116.浮点数的加减法掌握计算过程【例】:设浮点数的阶码为 5 位,尾数为 6 位,阶码和尾数均采用补码表示;下列数据 x、y 中的指数和小数部分均为二进制真值。舍入时采用截断法。 x-0.1101102 +0110,y-0.111011 2+1000,求 xy?解: x+y-0.1001012 +1001 ,x-y0.1011012 +1000 x-0.1001012 +0001,y 0.1101012-0001 ,求 xy?解: x+y-0.11000
5、02 0 ,x-y-0.1100102 +0001题目 1:已知 x=-0.1101102+0110,y=-0.111011 2+1000,求 x+y 和 x-y?(截断法)解:机器数形式(用补码表示):Sx补=1.001010 ,e x补=00110;S y补=1.000101,e y补 =01000x 1 0 0110 001010y 1 0 1000 000101对阶:|e|= |ex- ey | =|6-8|=2=(00010)2 ,根据根据小阶对大阶的原则,将 Sx 对阶后右移 2位。即:x 1 0 1000 110010 (截断法,右移高位补符 1)y 1 0 1000 00010
6、1则,S y补=1.000101尾数相加:双符号表示:S x补=11.110010 ,S y补=11.000101Sx+y补=S x补 +Sy补=11.110010+11.000101= 10.110111 (溢出,右规:尾数右移一位,阶码加 1)得:x+y补=10.1101112 01000规格化:右规得:x+y补=1.0110112 0100+1= 1.011011201001 (截断法)所以,x+y原=1.100101 201001 ,所以真值 x+y= -0.1001012+1001= -0.1001012+9尾数相减:双符号表示:S x补=11.110010 ,S y补=11.000
7、101,-S y补=00.111011Sx-y补=S x补-S y补=S x补+-S y补=11.110010+00.111011= 00.101101 (未溢出,且符合规格化)得:x-y 补=0.1011012 01000规格化:未溢出,且符合规格化所以真值 x-y= +0.1011012+1000= +0.1011012+8题目 2:已知 x=-0.1001012+0001,y=+0.1101012 -0001,求 x+y 和 x-y?(截断法)解:机器数形式(用补码表示):Sx补=1.011011 ,e x补=00001;S y补=0.110101,e y补 =10001x 1 0 00
8、01 011011y 0 1 0001 110101对阶:|e|= | ex- ey |=|1-(-1)|=2=(00010)2 ,根据根据小阶对大阶的原则,将 Sy 右移 2 位。即:x 1 0 0001 100101y 0 0 0001 001101 (截断法,右移高位补符 0)则S y补=0.001101尾数相加:双符号表示:S x补=11.011011 ,S y补=00.001101Sx+y补=S x补 +Sy补=11.011011+00.001101= 11.101000 (未溢出,但不满足补码测规格化,左规:尾数左移一位,阶码减 1)规格化:左规得:x+y补=1.010000 20
9、0001-1 = 1.010000200000 (截断法)所以,x+y原=1.110000 200000 ,所以真值 x+y= -0.1100002+0000= -0.1100002+0尾数相减:双符号表示:S x补=11.011011 ,S y补=00.001101,-S y补=11.110011Sx-y补=S x补-S y补=S x补+-S y补=11.011011+11.110011= 11.001110(未溢出,且符合规格化)规格化:未溢出,且符合规格化得:x-y 补=1.0011102 00001则,x-y 原=1.1100102 00001所以真值 x-y= -0.1100102+
10、0001= -0.1100102+1题目 3(书上 p110):已知 x=+0.1101012+0011,y=-0.1110102 +0010,求 x+y 和 x-y?解:把 x,y 转换为机器数形式:x=0 00011 110101 ,y= 1 00010 000110 (阶码和尾数都是补码表示)对阶:,先求阶差:-y补 =11110 ,e补=x补- y补=x 补+ -y补=00011+11110=00001 因为 e 为正,所以 ex ey,根据小阶对大阶的原则,把 y 尾数右移(00001) 2=1 位,得到 y 阶码,0010+1=0011,与 x 的阶码相同。对阶后,y=1 0001
11、1 100011 (右移高位补符号)Sy补=1.100011-Sy补=0.011101尾数求和/差:(1)做 x+y 时,将 x,y 的尾数相加。得:S x+y补=S x补+S y补=0.110101+1.100011= 0.011000取 x、y 的大阶作为和的阶码,得到x+y 补=0 00011 011000(2)做 x-y 时,将 x,y 的尾数相减,即将 -y补的尾数与 x 的尾数相加。得:S x-y补=S x补-S y补=S x补+-S y补=0.110101+0.011101 = 1.010010取 x、y 的大阶作为和的阶码,得到x-y补=1 00011 010010结果规格化:
12、向左破坏规格化:尾数运算发生溢出。需要向右规格化(右规:尾数右移高位补符,阶码加 1,)。向右破坏规格化:尾数运算未发生溢出,但不符合规格化。需要向左规格化(左规;尾数左移低位补 0,阶码减 1)。(1)在 x+y 计算过程中,进入符号位 S0 与最高有效位进位 S1 一致,未发生溢出;但是S0=S1=1,不符合规格化,结果需要左规。规格化后S x+y补= 0.110000 ,阶码 ex+y=00011-1=00010,则x+y补=0 00010 110000。所以 x+y=+0.1100002+0010 。(2)在 x-y 计算过程中,进入符号位 S0 与最高有效位进位 S1 不一致,即 S0 的进位为0,S 1 的进位为 1,发生溢出。结果需要右规。规格化后S x-y补= 1.101001 ,阶码 ex-y=00011+1=00100,则 x-y补=1 00100 101001得:x-y 原=1 00100 010111,所以 x-y= -0.0101112+0100。6.舍入方法【例】: S补=0.10011 ,则1) S补= 0.01001 1截断法:= 0.010010 舍 1 入法:=0.01010末位恒置 1 法:= 0.01001 2) S补= 0.00010 011截断法: = 0.000100 舍 1 入法:=0.00010末位恒置 1 法:= 0.00011