【问题标题】:Bit manipulation over flow位操作溢出
【发布时间】:2017-01-16 17:24:09
【问题描述】:

给定以下公式:

(((a-b)>>3) + c-d+4)<<2 

而且每个变量都是一个8位寄存器,需要找几位需要的结果才不会OVERFLOW

我认为答案是11

我们可以在(a-b) + the biggest number in (c-d+4) 获取的最大数字。

如果有人能解释一下,那就太好了。

【问题讨论】:

  • 问题是:给定有符号整数abcd 每个在 [-128,127] 中,需要的最小位数 N 是多少final 结果或任何 intermediate 结果都将溢出 [-2**(N-1), 2**(N-1)-1],其中@ 987654328@ 表示有符号(算术)右移。

标签: bit-manipulation bit bit-shift byte-shifting


【解决方案1】:

我认为你在正确的轨道上,我们应该尽量使a-bc-d+4尽可能大,所以我们设置a=255b=0c=255d=0

左移运算符部分产生(((a-b)&gt;&gt;3)=31(5 位)。

还有c-d+4=259(这里需要 9 位)。

31+259=290(所以这里我们需要 9 位)。

最后(290&lt;&lt;2)=1160 我们左移 2 次,最终需要 11 位,这可以存储高达 2047 的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-05
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2017-10-11
    • 2015-10-29
    相关资源
    最近更新 更多