首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2补码误差

2补码误差
EN

Stack Overflow用户
提问于 2015-12-24 17:57:33
回答 2查看 1.1K关注 0票数 3

我一般理解2的补语的概念。当将一个值转换为2的补码以进行减法时,只需将该数字的每一位数减去1's补码并加1。在计算类似于二进制的2-2的结果时,首先将-2转换为2的补码(我喜欢使用4位表示),然后将0010转换为1101,然后再转换为1110。然后计算0010 + 1110,得到0000,溢出的1被截断。

但是,像2-3这样的问题呢?所以我也做了同样的手术。2为0010,2的补体为3 (0011)为1101。所以0010 + 1101会导致1111,没有溢出。结果是15.15不是负1。我是否遗漏了2的补充工作的一个关键点,而其他网站和来源却忽略了这一点?

EN

回答 2

Stack Overflow用户

发布于 2015-12-24 18:11:58

记住,你在做签名算术。

在有符号算术中,最重要位位置的1或最左边的位置表示(-)号。

所以1111是一个负数。

1111翻转是0000加1是0001。

所以答案是1级,并有符号(-)。

2-3=-1

票数 0
EN

Stack Overflow用户

发布于 2015-12-24 18:19:20

当您在两个补码中计算时,结果总是必须作为两个补码来处理。如前所述,结果是-1在签名的两个补码,或15为无符号无溢出。

你必须注意的是,如果你用正数减法,结果是负的,你就不会溢出。但是如果结果是肯定的,就会有溢出。

这是合乎逻辑的:如果结果为正,则必须小于原始值。添加导致较小值的唯一方法是溢出。当结果为负值时,当处理为无符号时,它将始终大于原始值(MSB将为1,而原始值将为0),并且没有溢出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34456327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档