二元替代使用两个补体

时间:2017-12-12 20:45:23

标签: math binary

我对二进制算术不熟悉,我做了一个关于二进制减法的练习。我有一个解决方案,但它......不完全正确。 (考虑两个无符号位!)

任务是:00101 - 11101

第一步是在11101上使用两个补码,我们得到:00010的补码,然后我们加一个得到00011,现在我们可以加上数字得到:01000。 / p>

当我转换01000"返回"我得到24所以数字01000应该是-24,但为什么最左边的地方不是1?正确的解决方案应该是:101000(本书的解决方案),但我们需要计算什么才能得到这个解决方案?

这两个补充00011不正确吗?如果我们添加00011和11101,我们得到00000,所以00011应该是正确的。

2 个答案:

答案 0 :(得分:0)

您需要使用第一个数字的2&2补,即00101 2

00101 2 的2的补码是11011 2

现在将其添加到11101 2 ,我们得到111000 2 ,它对应于-24 10 ,因为最高有效位是符号位

注意:这是假设两个数字都是正数。

答案 1 :(得分:0)

看起来在该解决方案中引入了一个隐含的位。

"正确的解决方案应该是: 1 01000(书中的解决方案)"

如果您正在使用仅限制为5位的架构,那么11101 = -3就是这种情况,这意味着答案将是01000

根据事物的声音,分配没有指定你应该使用的位数。你的回答并不一定是错的,但我认为你应该假设你得到一个像11101这样的数字并且被告知它是肯定的,前面有一个额外的,隐含的零(或者可能更多)如果他们明确告诉过你的话。)

额外信息: 您可以在2s补码下获得的最大正数比最高有效位给出的值小两个,例如 对于5位系统,max_positive = 01110 = 14

这个假设的5bit架构可能会将2s补码数转换回正数,然后加上它(因为减去负数与添加该数字的正数相同)。 e.g。

  00101 - 11101
= 00101 + (~(11101 - 1))
= 00101 + (~11100)
= 00101 + (00011)
= 01000

来源/有用的工具: