对流程进行位操作

时间:2017-01-16 17:24:09

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

考虑以下公式:

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

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

我认为答案是11

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

如果有人可以解释,那么它是真实的。

1 个答案:

答案 0 :(得分:0)

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

左移操作员部分导致d=0(5位)。

(((a-b)>>3)=31(此处需要9位)。

c-d+4=259(所以这里我们需要9位)。

最后31+259=290我们向左移动了2次,最终需要11位,这可以存储最多2047的值。