我对二进制算术不熟悉,我做了一个关于二进制减法的练习。我有一个解决方案,但它......不完全正确。 (考虑两个无符号位!)
任务是:00101 - 11101
第一步是在11101上使用两个补码,我们得到:00010的补码,然后我们加一个得到00011,现在我们可以加上数字得到:01000。 / p>
当我转换01000"返回"我得到24所以数字01000应该是-24,但为什么最左边的地方不是1?正确的解决方案应该是:101000(本书的解决方案),但我们需要计算什么才能得到这个解决方案?
这两个补充00011不正确吗?如果我们添加00011和11101,我们得到00000,所以00011应该是正确的。
答案 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
来源/有用的工具: