用不同长度的数字减去二进制数

时间:2012-02-29 23:56:30

标签: binary

我想解决:1111 - 10010(二进制)

我想用两个赞美来解决它。我意识到答案是消极的,但我不知道如何得到它。我尝试在第一个数字(01111)之前设置一个零,使数字等于1和0。另外,我怎么知道答案是否定的?

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

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

1 个答案:

答案 0 :(得分:0)

我认为解决这个问题的最简单方法就是将其简化为小步骤。

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

我发现在二进制补码中进行减法的最简单方法是method of complements,而不是试图从正15减去正数18(+15 - (+18)),我们反而加负18至正15(+15 +( - 18))。这有相同的结果,但更容易做到两个赞美(注意:如果您的数字系统没有负数,则不能这样做)

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

要将-18转换成二进制补码,我们取两个补码010010翻转这些位(将0转换为1s,1s转换为0)101101,然后使用binary addition将一个加到翻转位

      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

的两个补码