【问题标题】:Subtracting binary with numbers of different lengths用不同长度的数字减去二进制
【发布时间】:2012-03-01 09:12:10
【问题描述】:

我正在尝试解决:1111 – 10010(二进制)

我想用两个人的恭维来解决它。我意识到答案是否定的,但我不知道如何得到它。我尝试在第一个数字 (01111) 之前放置一个零,以使数字具有相等数量的 1 和 0。另外,我怎么知道答案是否定的?

    01101
  + 00001
____________
    01110  <-- two's compliment

 01110
+01111
________
 11101      //this isn't right

【问题讨论】:

标签: binary


【解决方案1】:

我认为解决这个问题最简单的方法就是把它分成小步骤。

我的第一个假设是你试图解决 15 (1111 (binary)) - 18 (10010 (binary))

我发现在二进制补码中进行减法的最简单方法是使用method of complements,而不是尝试从正数 15 (+15 - (+18)) 中减去正数 18,而是将负数 18 添加到正 15 ( +15 + (-18) )。这具有相同的结果,但在二的恭维中更容易做到(注意:如果你的数字系统没有负数,你不能这样做)

所以我们必须取数字 15 和 -18 以及 convert them into two's complement numbers。由于 18 用 5 位二进制表示,我们需要至少使用 6 个 6 位来表示 -18 的二进制补码。

要将 -18 转换为二进制补码,我们在二进制补码 010010 中取 18 翻转这些位(将 0 变为 1,将 1 变为 0)101101,然后使用 binary addition 将翻转的位加 1

      1      (carried digits)
  101101     (-19 (flipped 18 ))
+ 000001     (1)
_________
  101110     (-18)

要将 15 转换为二进制补码,我们将 15 取为二进制 (1111),然后在左侧添加零,直到其位数与 -18 (101110) 001111 相同

既然我们都是二进制补码,我们可以使用binary addition 将它们加在一起

   111       (carried digits)
  001111     (15)
+ 101110     (-18)  
_________
  111101     (-3)

这给了我们 -3 的二进制补码,这是正确的答案 (15 - 18 = -3)。

您可以通过 twos complement wiki page 了解二进制补码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 2020-11-13
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    相关资源
    最近更新 更多