发布
社区首页 >问答首页 >用不同长度的数字减去二进制

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

Stack Overflow用户
提问于 2012-03-01 07:56:30
回答 1查看 2.6K关注 0票数 1

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

我想用两个人的赞美来解决这个问题。我知道答案将是否定的,但我不知道如何得到它。我试着在第一个数字(01111)前加一个0,使数字等于1和0。另外,我怎么知道答案是否定的?

代码语言:javascript
代码运行次数:0
复制
    01101
  + 00001
____________
    01110  <-- two's compliment

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-01 09:12:10

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

我的第一个假设是您正在尝试解决15 (1111 (二进制))- 18 (10010 (二进制))

我发现在二的补码中做减法的最简单的方法是通过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转换为2的补码,我们在2的补码中取18进行010010翻转这些位(将0转换为1,1转换为0) 101101,然后使用binary addition将1添加到翻转的位

代码语言:javascript
代码运行次数:0
复制
      1      (carried digits)
  101101     (-19 (flipped 18 ))
+ 000001     (1)
_________
  101110     (-18)

为了将15转换为2的补码,我们将15转换为二进制(1111),然后在左侧添加0,直到它具有与-18 (101110) 001111相同的位数

现在我们两个数字都在二的补码中,我们可以使用binary addition将它们相加

代码语言:javascript
代码运行次数:0
复制
   111       (carried digits)
  001111     (15)
+ 101110     (-18)  
_________
  111101     (-3)

这给了我们两个补语中的-3,这是正确的答案(15 - 18 = -3)。

通过查看twos complement wiki page,您可以了解2的补码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9508629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档