负数的二进制补码负数相加为什么用补码,溢出以后该怎么算

为什么使用二进制计算的时候会出现溢出现象?_百度知道
为什么使用二进制计算的时候会出现溢出现象?
使用二进制计算的时候会出现溢出现象,是因为计算机都有它的上限和下限,太大的数值和太小的数值都是无法显示出来的。计算机中用补码来表示和存储数值,而在进行数值的算术运算时由于机器字长的限制往往会出现补码溢出,导致计算结果错误。针对这个问题,提出了一种根据溢出结果得到正确结果的计算方法:两个正数相加溢出时,将错误解加上2~(n+1)即为正确解;两个负数相加溢出时,将错误解减去2~(n+1)即为正确解。
采纳率:100%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。二进制 负数加负数怎么等于正数?没有溢出? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。3被浏览495分享邀请回答2 条评论分享收藏感谢收起2 条评论分享收藏感谢收起写回答什么是补码加减运算溢出?判别溢出有哪几种方法?并我说明工作原理。_百度知道
什么是补码加减运算溢出?判别溢出有哪几种方法?并我说明工作原理。
我有更好的答案
对于加法来说,操作数符号可能是:1. [正] + [正]2. [正] + [负]3. [负] + [正]4. [负] + [负]对于减法来说:1. [正] - [正] 相当于加法里的(2)2. [正] - [负] 相当于加法里的(1)3. [负] - [正] 相当于加法里的(4)4. [负] - [负] 相当于加法里的(3)加法里,哪种操作会溢出?对于一个有N位二进制的补码,其能表示的数字的范围是:-2^(N-1) ~ +2^(N-1)-1负数:-2^(N-1) 到 -1正数:1 到 2^(N-1)-1那么对于加法来说:“[正] + [负]”或者“[负] + [正]”永远都不会溢出,不管两个操作数取值多少,结果都落在有效范围内。而超出有效范围的两种可能性就是:1. [正] + [正]2. [负] + [负]那么再看这两种操作如果超出范围的话,表现形式是什么样的:定义两个事件:1. 最高有效位进位:对于N位补码,第N-1位发生了进位;2. 符号位进位:对于N位补码,第N位符号位发生;定义4个边界值,以8位有效字长为例:最大正127 ()最小正1 & ()最小负-128()最大负-1 &()列出所有组合(消除交换律重复)符号位 最高有效位 &是否发生溢出 &最高有效位进位 &符号位进位[最小正] + [最小正] & 0 0 & & &0 0 & & & & &N & & & & & & N & & & & & &N[最小正] + [最大正] & 0 0 & & &0 1 & & & & &Y & & & & & & Y & & & & & &N[最小正] + [最小负] & 0 1 & & &0 0 & & & & &N & & & & & & N & & & & & &N[最小正] + [最大负] & 0 1 & & &0 1 & & & & &N & & & & & & Y & & & & & &Y[最大正] + [最大正] & 0 0 & & &1 1 & & & & &Y & & & & & & Y & & & & & &N[最大正] + [最小负] & 0 1 & & &1 0 & & & & &N & & & & & & N & & & & & &N[最大正] + [最大负] & 0 1 & & &1 1 & & & & &N & & & & & & Y & & & & & &Y[最小负] + [最小负] & 1 1 & & &0 0 & & & & &Y & & & & & & N & & & & & &Y[最小负] + [最大负] & 1 1 & & &1 0 & & & & &Y & & & & & & N & & & & & &Y[最大负] + [最大负] & 1 1 & & &1 1 & & & & &N & & & & & & Y & & & & & &Y所以,从规律上看凡是发生溢出操作,“最高有效位进位”和“符号位进位”必然是一个是Y另一个是N,凡是不发生溢出的操作,必然是两个全Y或者两个全N这就是根据最高有效位和符号位发生进位的异或来判断是否溢出规律。下面是逻辑证明环节,很绕,证明方法很简单,就是把几种条件都列出来判断一下即可:[正]+[正]溢出,因为两个都是正整数,所以符号位都是0,溢出时最高位发生了进位,但因为符号位是0,0加上进位的1是永远不会发生进位的。所以对于前面定义的两个事件:“最高有效位进位”发生了,“符号位进位”未发生。[正]+[负]不溢出时,此时设正数范围包括0:如果结果为负整数,因为第二个操作数的符号位是1,结果的符号位也是1,那么“符号位进位”未发生,同时“最高有效位进位”也未发生。因为如果发生了,会产生一个进位1,与符号位1相加会倒是符号位变化,而此时符号位是不变的,所以可以肯定两个事件都没有发生。如果结果为正整数,那么必然同时发生了“最高有效位进位”和符号位进位”,因为第二个操作数的符号位是1,但结果符号位是0,所以符号位有进位(1 + 0 + X = 10)。而第一个操作数的符号位又是0,所以必然是最高有效位产生了一位进位才让符号位获得了一个1才能进位,对于符号位的计算来说[正]符号位0 + [负]符号位1 + 最高有效位进位X = 10,X必然是1[负]+[负]溢出,因为两个都是负整数,所以符号位都是1,溢出时符号位发生了进位(两个都是1)。再看最高有效位是否有进位,对于8位的负数加法来说,产生溢出,意味着结果范围在-129~-256之间,这个范围内的二进制数,以9位补码来看,就是1 到1 ,那么这两个数如果减掉符号位相加的1 的话,得到的结果就是 到,这个范围内的数字第8位都是0,所以从符号位的计算可以得知[负]符号位1 + [负]符号位1 + 最高有效位进位X = 10,最高有效位的进位值必然是0,所以最高有效位必然没有发生进位。参考资料知乎:
采纳率:100%
(1)补码加法运算:
整数:[A]补+[B]补=[A+B]补
(模为2的n+1次方,因为可能会有进位)
小数:[A]补+[B]补=[A+B]补
(模为2,因为A和B都小于1)(2)补码减法运算:
因为A-B = A+(-B),所以减法可以变通为加法进行计算。
整数:[A-B]补=[A]补+[-B]补
(模为2的n+1次方)
小数:[A-B]补=[A]补+[-B]补
在做补码加减法时,只需将符号位和数值部分一起参加运算,并且将符号位的进位自然丢掉就可以了。但是,当运算结果超出机器字长所能表示的数值范围,这种情况叫做溢出。(3)判断溢出:
溢出出现的情况:正数+正数,负数+负数,正数-负数,负数-正数 这四种情况,当参加运算的两个数的符号(正负)相同,而结果则与这2个数的符号不同,即为溢出。
计算机中通常将两个参与运算的数的符号位产生的进位与最高有效位(&,&&.&后的那位)产生的进位进行异或操作(无进位即进位为0),异或结果为1,是溢出,异或结果为0,无溢出。
最后个并说明工作原理呢?怎么没有?
从规律上看凡是发生溢出操作,“最高有效位进位”和“符号位进位”必然是一个是Y另一个是N,凡是不发生溢出的操作,必然是两个全Y或者两个全N这就是根据最高有效位和符号位发生进位的异或来判断是否溢出规律。下面是逻辑证明环节,很绕,证明方法很简单,就是把几种条件都列出来判断一下即可:[正]+[正]溢出,因为两个都是正整数,所以符号位都是0,溢出时最高位发生了进位,但因为符号位是0,0加上进位的1是永远不会发生进位的。所以对于前面定义的两个事件:“最高有效位进位”发生了,“符号位进位”未发生。[正]+[负]不溢出时,此时设正数范围包括0:如果结果为负整数,因为第二个操作数的符号位是1,结果的符号位也是1,那么“符号位进位”未发生,同时“最高有效位进位”也未发生。因为如果发生了,会产生一个进位1,与符号位1相加会倒是符号位变化,而此时符号位是不变的,所以可以肯定两个事件都没有发生。如果结果为正整数,那么必然同时发生了“最高有效位进位”和符号位进位”,因为第二个操作数的符号位是1,但结果符号位是0,所以符号位有进位(1 + 0 + X = 10)。而第一个操作数的符号位又是0,所以必然是最高有效位产生了一位进位才让符号位获得了一个1才能进位,对于符号位的计算来说[正]符号位0 + [负]符号位1 + 最高有效位进位X = 10,X必然是1[负]+[负]溢出,因为两个都是负整数,所以符号位都是1,溢出时符号位发生了进位(两个都是1)。再看最高有效位是否有进位,对于8位的负数加法来说,产生溢出,意味着结果范围在-129~-256之间,这个范围内的二进制数,以9位补码来看,就是1 到1 ,那么这两个数如果减掉符号位相加的1 的话,得到的结果就是 到,这个范围内的数字第8位都是0,所以从符号位的计算可以得知[负]符号位1 + [负]符号位1 + 最高有效位进位X = 10,最高有效位的进位值必然是0,所以最高有效位必然没有发生进位。
本回答被提问者和网友采纳
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。07-0807-0809-0809-04
04-1510-2803-0903-03
◇本站云标签
◇热点推荐说明由加补码完成减法运算的原理以及溢出产生的原因及解决的办法【数字电路吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:7,529贴子:
说明由加补码完成减法运算的原理以及溢出产生的原因及解决的办法
为什么可以通过以取反码+1的方式(原理是什么,怎么来的?)来方便地进行减法运算?
电源肯定选择苏州明纬专业团队 厂家直销 价格低 质量好!
例如:a-b=a+(-b)对于负数的补码等于其反码+1。
二进制中负数是这样表示的,原理可以看一下布尔代数及二进制和十进制转换计算方法。
贴吧热议榜
使用签名档&&
保存至快速回贴}

我要回帖

更多关于 二进制负数补码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信