溢出判断

来源:互联网 发布:wpf数据绑定视频 编辑:程序博客网 时间:2024/05/22 22:41

补码加法运算溢出判断三种方法:[方法一]Xf、Yf分别两个数的符号位,Zf为运算结果符号位。当Xf =Yf =0(两数同为正),而Zf=1(结果为负)时,负溢出;当出现Xf =Yf =1(两数同为负),而Zf=0(结果为正),正溢出.[方法二]Cs表示符号位的进位,Cp表示最高数值位进位,⊕表示异或。若 Cs⊕Cp =0 ,无溢出;若 Cs⊕Cp =1 ,有溢出。[方法三]用变形补码进行双符号位运算(正数符为00,负数符号以11)若运算结果的符号位为"01",则正溢;若结果双符号为10,则负溢出;若结果的双符号位为00或11,无溢出。


所谓双符号位判决法是指:

计算机运算溢出检测机制,采用双符号位,00表示正号,11表示负号。如果进位将会导致符号位不一致,从而检测出溢出。结果的符号位为01时,称为上溢;为10时,称为下溢。  
 例如设X = + 1000001,Y = + 1000011,采用双符号为表示X=00 1000001,Y=00 1000011,[X + Y]补=01 0000100,实际上,运算结果产生了正溢出。   
      设x=0.1101,y=-0.0111,符号位为双符号位 ,用补码求x+y,x-y   [x]补+[y]补=00 1101+11 1001=00 0110   [x-y]补=[x]补+[-y]补=00 1101+00 0111=01 0100 结果错误,正溢出   
在确定了运算的字长和数据的表示方法后,数据的范围也就确定了。一旦运算结果超出所能表示的数据范围,就会发生溢出。发生溢出时,运算结果肯定是错误的。当两个同符号的数相加(或者是相异符号数相减)时,运算结果有可能产生溢出。常用的溢出检测机制主要有进位判决法和双符号位判决法。双符号位判决法若采用两位表示符号,即00表示正号、11表示负号,则溢出时两个符号位就不一致了,从而可以判定发生了溢出。
0 0
原创粉丝点击