溢出,溢出的检测方法有哪些?

台式机

8人已加入

描述

溢出,溢出的检测方法有哪些?
  
  在定点小数机器中,数的表示范围为|x|<1. 在运算过程中如出现大于1的现象,称为“溢出”。在定点机中,正常情况下溢出是不允许的。

溢出

  [例12] x=+0.1011, y=+0.1001,求x+y。
  
  [解:]
  
  [x]=0.1011 [y]=0.1001
  
  [x]     0.1011
  
  +[y]    0.1001
  --------------------
  [x+y]  1.0100
  
  两个正数相加的结果成为负数,这显然是错误的。
  
  [例13] x=-0.1101, y=-0.1011,求x+y。
  
  [解:]
  
  [x]=1.0011 [y]=1.0101
  
  [x]     1.0011
  
  +[y]     1.0101
  --------------------
  [x+y]   0.1000
  
  两个负数相加的结果成为正数,这同样是错误的。

之所以发生错误,是因为运算结果产生了溢出。两个正数相加,结果大于机器所能表示的最大正数,称为上溢。而两个负数相加,结果小于机器所能表示的最小负数,称为下溢。
  
  为了判断“溢出”是否发生,可采用两种检测的方法。第一种方法是采用双符号位法,这称为“变形补码”或“模4补码”,从而可使模2补码所能表示的数的范围扩大一倍。变形补码定义为
  
                            (2.22)
  
  或用同余式表示为
  
  [x]=4+x   (mod 4)
  
  下式也同样成立:
  
  [x]+[y]=[x+y]    (mod 4)
  
  为了得到两数变形补码之和等于两数之和的变形补码,同样必须:
  
  1. 两个符号位都看作数码一样参加运算
  
  2. 两数进行以4位模的加法,即最高符号位上产生的进位要丢掉。
  
  采用变形补码后,如果两个数相加后,其结果的符号位出现“01或“10两种组合时,表示发生溢出。这是因为两个绝对值小于1的数相加,其结果不会大于或等于2,所以最高符号位永远表示结果的正确符号。
  
  [例14] x=+0.1100, y=+0.1000,求x+y。
  
  [解:]
  
  [x]=00.1100, [y]=00.1000
  
  [x]   00.1100
  
  +[y]  00.1000
  -------------------
                01.0100
  
  两个符号位出现“01”,表示已溢出,即结果大于+1。

[例15] x=-0.1100, y=-0.1000,求x+y。
  
  [解:]
  
  [x]=11.0100, [y]=11.1000
  
  [x]   11.0100
  
  +[y]  11.1000
  -------------------
              10.1100
  
  两个符号位出现“10”,表示已溢出,即结果小于-1。
  
  由此可以得出如下结论:
  
  1. 当以模4补码运算,运算结果的二符号位相异时,表示溢出;相同时,表示未溢出。故溢出逻辑表达式为V=Sf1⊕Sf2,其中Sf1和Sf2分别为最高符号位和第二符号位。此逻辑表达式可用异或门实现。
  
  2. 模4补码相加的结果,不论溢出与否,最高符号位始终指示正确的符号。
  
  第二种溢出检测方法是采用单符号位法。从例1和例2中看到,当最高有效位产生进位而符号位无进位时,产生上溢;当最高有效位无进位而符号位有进位时,产生下溢。故溢出逻辑表达式为V=Cf⊕Co,其中Cf为符号位产生的进位,Co为最高有效位产生的进位。此逻辑表达式也可用异或门实现。
  
  在定点机中当运算结果发生溢出时,机器通过逻辑电路自动检查出溢出,并进行中断处理。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分