【问题标题】:subtracting two values of unknown bitsize减去两个未知尺寸的值
【发布时间】:2011-06-25 20:25:43
【问题描述】:

我正在尝试使用二进制补码将两个值相减。我有溢出位的问题。由于我的容器包含一个无限位大小的整数,我不知道结果的最高位是真的来自结果还是只是溢出。如果不使用-,我将如何摆脱溢出(我不能只做1 << bits - 1,因为这将涉及使用容器,而容器还没有工作operator-

0b1111011111 - 0b111010000 -> 0b1111011111 + 0b000110000 -> 1000001111

vs(通常)

0b00000101 - 0b000000001 -> 0b00000101 + 0b11111111 -> 0b100000100 -> 0b00000100

【问题讨论】:

  • 你有印刷错误吗?我认为您的1000001111 应该是10000001111。打印错误的1000001111 恰好是问题的正确答案,以错误的方式到达;也许这增加了你的困惑。

标签: c++ math subtraction twos-complement


【解决方案1】:

如果你计算 a - b,你必须以某种方式“排列”这个词 - 因为你必须用 m=max(bitwidth(a), bitwidth(b)) 的位宽来对 2 表示否定。

要消除溢出,您只需执行 mask = negate(1

【讨论】:

    【解决方案2】:

    您的问题是您要从 10 位 1111011111 中减去 9 位 111010000111010000 的二进制补码是 ...11111000110000,其中的点试图表明您必须根据需要向左侧填充尽可能多的 1 位。在这里,您需要 10 位,因此 111010000 的二进制补码不是 000110000 而是 1000110000

    所以你想计算1111011111 + 1000110000 = 11000001111,你只需将其截断为10位即可得到正确答案1000001111

    【讨论】:

      猜你喜欢
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      相关资源
      最近更新 更多