鱼C论坛

 找回密码
 立即注册
查看: 2099|回复: 3

关于溢出的问题想请教一下

[复制链接]
发表于 2013-7-7 20:29:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
两个有符号数做运算,如果发生溢出的话OF位肯定是等于1吧??那比如我11111111+11111111结果是111111110,这会产生溢出,11111111这个是负数,两个负数相加肯定是负数,那得到的结果111111110前面第9位是溢出去了,CPU里的结果是11111110,有溢出但CPU结果是负数。。。那这要怎么确定逻辑结果到底是正还是负呢????溢出位有时候是1有时候是0我要怎么确认这溢出位到底是1还是0????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-8 13:27:40 | 显示全部楼层
楼主可能是被符号位给搞混乱了,这个我曾经也纠结了很久。
  首先,楼主有没有没有注意到:计算机在进行负数运算,或者说减法运算的时候,先把它变成含符号位的加法运算,但是接下来得到的结果还需要进行再一次的补码才是正确的答案。比如你的111 111 110 楼主需要将它换成补码(100 000 010 => -2),才去考虑是否溢出。
  其实楼主在实际运用中倒是不用考虑补码啊什么的。直接-1-1=-2结果是负数, 所以SF为1 。不就行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-8 15:51:10 | 显示全部楼层
7位 6位 5位 4位 3位 2位 1位 0位
1    1    1    1    1    1    1    1
1    1    1    1    1    1    1    1
有符号运算结果是1111  1110,没有溢出
无符号运算结果是111111110,有进位
有符号数相加:
次高位(6位)进位,溢出
最高位(7位)进位,溢出
次高位 & 最高位同时进位,不溢出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-8 16:23:05 | 显示全部楼层
无符号加法,“结果放不下”也不会产生溢出,只会出现进位。

有符号加法,“结果放不下”就会产生溢出,并导至结果完全是错的,可能你在做上面的有符号加法时,想着在纸上列坚式,最最位产生了一个“进位”,而结果放不下,但补码加法这个进位进行丢弃,结果才是有符号加法的正确结果,这是补码运算的规则的一部分,数学发现的,必须丢弃。
而溢出标志就是用来告诉你结果是不是正确的。

SF标志记录结果的符号位,也就是结果的最高位,上面的第7位,但只有你当作有符号运算时,SF才有意义,并可通过SF获知结果的正负(你了可以通过结果的最高位来判断,是一样的)

我觉得楼主主要还是对补码运算有疑问。

评分

参与人数 1鱼币 +5 收起 理由
小甲鱼 + 5 非常棒!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-29 09:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表