【问题标题】:Adding negative and positive binary?添加负和正二进制?
【发布时间】:2010-09-25 16:42:35
【问题描述】:

X = 01001001 和 Y = 10101010

如果我想将它们加在一起,我该怎么做?它们是“Two's Complement”... 我尝试了很多东西,但我不太确定我得到了正确的答案,因为似乎有不同类型的规则。

只是想确保它是正确的:
1. 按原样添加它们不会转换负数
2. 将得到的负数转换为和。

f.eks
01001001+10101010 = 11110011 => 00001100 => 1101 => -13

要么?
1. 转换负片
2.将它们加在一起并转换负数

f.eks
01001001+10101010 => 01001001 + 01010110 => 10011111 => 01100001 => -97


所以基本上我想做的是采取:X-Y和X+Y
谁能告诉我该怎么做?

一些资源网站: student-binary celtickane swarthmore

【问题讨论】:

  • 具有重新标记能力的人应该将其标记为“作业”

标签: math binary


【解决方案1】:

二进制补码的美妙之处在于,在二进制级别上,这是一个解释问题,而不是算法问题——两个有符号数相加的硬件与无符号数相加的硬件相同(忽略标志位)。

您的第一个示例 - “只需添加它们” - 正是正确的答案。您的示例数字

  • 01001001 = 73
  • 10101010 = -86

所以,正确答案确实是-13。

减法是一样的,因为二进制补码不需要特殊处理:你“只是减去它们”。

请注意,有趣的是处理上溢/下溢位。您不能将 73 - (-86) 的结果表示为 8 位二进制补码数...

【讨论】:

  • 但是如果减法和加法一样呢?那我不会得到同样的答案吗?
  • 无符号数的减法与有符号数的减法相同。
  • 啊,所以我遵循与加法部分相同的减法和转换规则:)
  • 最后不需要“转换”。你得到“11110011”的值只是'是'-13。
  • 减法与加法不同,它与对任何其他数字的子化相同,只需从顶部的相应位减去底部的每个数字(每个位),借用如果您尝试从 0 中减去 1,则左侧的位...与小数减法相同
【解决方案2】:

当两个参数的符号相反时,添加二进制补码不需要任何特殊处理。您只需像往常一样在二进制中添加它们,结果的符号就是您保留的符号。

【讨论】:

    【解决方案3】:

    为了确保您理解二进制补码,将正数转换为负数(反之亦然):反转每一位,然后将结果加 1。

    比如你的正数 X = 01001001 变成 10110101+1=10110110 为负数;你的负数 Y = 10101010 变成 01010101+1=01010110 作为一个正数。

    要从 X 中减去 Y,请将 Y 取反并加。 IE。 01001001 + 01010110。

    【讨论】:

      【解决方案4】:

      您的困惑可能是因为所涉及的数字的宽度。为了更好地了解这一点,您可以尝试从无符号整数中创建一个有符号整数。

      如果您的无符号整数的 MSB 已经为 0,那么您可以将其读取为有符号并得到相同的结果。
      如果 MSB 为 1,那么您可以在左侧附加一个 0 以获得有符号数。您应该对所有带符号的数字进行符号扩展(即,如果 MSB 为 0,则添加 0,如果 MSB 为 1,则添加 1)以获得相同宽度的数字,以便您可以“正常”地进行算术运算。

      例如,使用您的号码:

      X = 01001001:无符号,MSB 为 0,什么都不做。

      Y = 10101010:已签名,对 X 什么都没做,仍然什么也不做。

      但是如果我们把 X 的 MSB 改成 1:

      X = 11001001:无符号,MSB为1,加一个0 --> 011001001

      Y = 10101010:有符号,扩展 X,所以符号扩展 Y --> 110101010

      现在你有两个带符号的数字,你可以用你已经知道的方式加减。

      【讨论】:

        猜你喜欢
        • 2019-06-03
        • 1970-01-01
        • 1970-01-01
        • 2012-01-22
        • 2013-10-20
        • 2019-06-16
        • 2015-04-07
        • 2014-09-26
        • 1970-01-01
        相关资源
        最近更新 更多