溢出的判断之一

看计算机组成,遇到这样一道题:

例题:

两个同符号的数相加或异符号的数相减,所得结果的符号位SF和进位标志CF进行__D__运算为1时,表示运算的结果产生溢出。

A.       B.        C.与非       D.异或


分析:

正溢:两个正数相加而绝对值超出允许的表示范围

 

负溢:两个负数相加绝对值超出允许的表示范围

 

1:

8+7=15

0 1000

0 0111

———

0 1111(正确)

 

2

7+9=16

0 0111

0 1001

———

1 0000(正溢)


3:

15+-8=7

0 1111

1 1000-8的补码)

———

0 0111(正确)

 

4

-8+-9=-17

1 1000-8的补码)

1 0111-9的补码)

———

0 1111(负溢)


以上是对24位的带符号二进制数进行运算,运算结果仍然是14位带符号二进制数。

可以知道这个范围是-16~+15,上例中,例2和例4结果溢出。

 

令两个操作数的符号位分别为:SaSb

结果的符号位为:SF

符号位直接参与运算,所产生的符号位进位为CF

讲符号位之后的A1B1称为最高有效位,它产生的进位为C

 

在例3中,C=1,但并没有溢出,进位不等于溢出,不能简单地单个进位信号去判断有无溢出。

 

给出一个判断溢出好用的方法


单位号位的信息量只能表示两种可能:数为正或为负,如果产生溢出,就会使符号位的含义产生混乱。将符号位扩充为两位,信息量扩大,就能判别是否有溢出以及结果的正确符号。

 

同样以前面的几个算式为例:

1'

8+7=15

00 1000

00 0111

———

00 1111(正确)

 

2'

7+9=16

00 0111

00 1001

———

01 0000(正溢)

 

3':

15+-8=7

00 1111

11 1000-8的补码)

———

00 0111(正确)

 

4'

-8+-9=-17

11 1000-8的补码)

11 0111-9的补码)

———

10 1111(负溢)




00——结果为正,无溢出

01——结果正溢

10——结果负溢

11——结果为负,无溢出

 

双符号位中,高位就是符号位的进位:CF,低位是结果位的符号位:SF

CFSF不同时,表示溢出,

相同时,表示操作正常。


  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值