COA——溢出

有符号数的运算中,进(借)位和溢出是两个完全不同的概念。不能用进(借)位来判断结果是否溢出。

进(借)位:加法运算时,符号位向更高位产生进位;减法运算时,符号位向更高位产生借位。

运算溢出:运算结果超出运算器所能表示的范围。

 

那么如何判断溢出呢?下面给出两种方法,其中第2个方法更方便一些。

方法1:

同号相减异号相加肯定不会溢出。而同号相加或异号相减则可能溢出,判别方法为:

如果同号相加时结果符号与加数符号相反,或者异号相减时结果符号与减数符号相同,则结果溢出。

方法2:

两个8位有符号二进制数相加或相减时,若C7C6=1,则结果溢出。C7为最高位的进(借)位;C6为次高位的进(借)位。

下面用例子来说明带符号数运算中可能出现的四种情况。

CASE1: 有进位,结果溢出。

-75-113=-188,两个负数相加,超过了结果所能表示的范围。C=1,O=1,表示两个负数相加超过表示范围。(A>B)

CASE2: 有进位,结果未溢出。

66-51=15,正数加负数,结果为一个正数,但是却是有进位的,但是没有溢出。(A>B)

CASE3: 无进位,结果溢出。

66+99=165,正数相加,超过了计算机所能表示的范围,所以结果会产生溢出。(A>B)

CASE4: 无进位,结果未溢出。

32+11=43,两个正数相加,结果没有超出可表示的范围,所以不产生溢出。

所以可以看出,有溢出不一定有进位,有进位不一定有溢出。

无符号数的大小比较

在符号数的大小比较中,使用的是C和Z。

A,NBE – C=0  AND Z=0

AE,NB,NC – C=0

B,NAE,C – C=1

BE,NA – C=1 OR Z=1

E,Z – Z=1

有符号数的大小比较

G,NLE – [(S=1 AND O=1)OR(S=0 AND O=0)]AND[Z=0]

GE,NL – (S=1 AND O=1)OR(S=0 AND O=0)

L,NGE – (S=1 AND O=0)OR(S=0 AND O=1)

LE,NG – (S=1 AND O=0)OR(S=0 AND O=1)OR(Z=1)

未经允许不得转载:TacuLee » COA——溢出

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址