先简单介绍溢出,所谓的溢出是指:运算结果超出机器数的表示范围。根据概念我们可知相异的数相加是不会产生溢出的。
溢出分为正溢和负溢。正溢:正数相加溢出。负溢:相加绝对值溢出。
下面介绍判断溢出的方法:
介绍几个例子(采用补码运算):
例一
3+6=9转2进制
0 0011
0 0110
0 1001
例二
8+9=17
0 1000
0 1001
1 0001(正溢)
例三
8+(-5)=3
0 1000
1 1011
0 0011
例四:(-9)+(-8)=(-17)
1 0111
1 1000
0 1111(负溢)
对上面的几个例子进行分析,设两个操作数的符号位分别为a,b,结果的符号位为f。符号位直接参与运算,所产生的符号位进位为d,把符号位之后的A1B1称为最高有效位,最高有效位进位产生的进位为e。根据这些信号的关联,判断是否溢出。
方法一:溢出包含两种情况(a=b=0,f=1此时为正溢,a=b=1,f=0此时为负溢)
方法二:从进位信号之间的角度出发:当发生正溢时最高有效数进位产生的信号为e=1,d=0。产生负溢时,e=0,d=1。其他未溢出情况e=d
方法三:扩展符号位,用多位表示。