【问题标题】:Binary Substraction with using two's complement使用二进制补码的二进制减法
【发布时间】:2018-05-26 15:32:17
【问题描述】:

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

任务是:00101 - 11101

第一步是在11101上使用二进制补码,我们得到:00010和一个补码,然后我们加一个得到00011,现在我们可以将数字相加得到:01000。

当我将 01000 转换为“返回”时,我得到 24,所以数字 01000 应该是 -24,但为什么最左边的位置没有 1?正确的解应该是:101000(书上的解),但是我们要计算什么才能得到这个解呢?

二进制补码00011不正确吗?如果我们将 00011 和 11101 相加,我们得到 00000,所以 00011 应该是正确的。

【问题讨论】:

  • 如果两个原始数字都是正数,那么您在取二进制补码时忘记扩展符号位。尝试将两个值都设为 8 位(甚至 6 位),然后重新计算两者的补码。

标签: math binary


【解决方案1】:

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

“正确的解应该是:101000(书上的解)”

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

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

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

这种假设的 5 位架构可能会将 2s 补码数转换回正数,然后将其相加(因为减去负数与添加该数的正数相同)。 例如

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

来源/有用的工具:

【讨论】:

    【解决方案2】:

    您需要取第一个数字的 2 的补码,即 001012

    00101的2的补码2是110112

    现在将它添加到 111012,我们得到 1110002,它对应于 -2410,因为最高有效位是符号位.

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

    【讨论】:

    • 为什么?这些位是无符号的。我们取减数的二进制补码,即 11101。
    • 111000-24 是如何对应的? 111000 的补码是001000,对吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 2012-09-21
    • 1970-01-01
    相关资源
    最近更新 更多