有效的解决方法(A& N)+(B& N)+(C& N)

时间:2013-08-25 07:01:07

标签: c bit-manipulation

什么是有效的解决方法 (A & N) + (B & N) + (C & N) ..等等。 其中&代表位智操作。 ABCN都是正整数。 是否可以减少计算量。

3 个答案:

答案 0 :(得分:1)

如果你正在组合位掩码,那么你可能得到你需要的东西:(A & N) | (B & N) |...在这种情况下,你会做得更好(A | B | C | ...)& Ñ

N.B。如果N = 0x0020A = 0x003fB=0x0a25则:

(A & N) + (B & N) = 0x0040 

(A|B)&N = 0x0020

这通常是组合位字段时所需要的。

答案 1 :(得分:1)

不,它不会起作用。你总是有这样的危险,即掩盖区域中的添加会弄乱你的数据。

,例如N = 0x0020, A = 0x001f, B=0x002fN = 0b0100000, A = 0b0011111, B = 0b0101111

这里的补充会带给你

  0b0011111
+ 0b0101111
-----------
  0b1001110
& 0b0100000
-----------
  0b0000000
===========

此处,低5 bis的加法对第5位有影响。

如果您在添加之前执行& N,则不会产生任何影响:

  0b0000000
+ 0b0100000
-----------
  0b0100000
===========

答案 2 :(得分:0)

如其他答案所示,这一般不起作用。事实上,它通常不会。

不要在这里宣传我自己的东西,但this site可以解决这个问题。例如,如果您输入

solve[n] (a & n) + (b & n) == (a + b) & n

这意味着“为每个a,b解释n,(a & n) + (b & n) == (a + b) & n

换句话说,找到n,使其适用于所有ab

只有两个结果。 -1和0是有意义的。它适用于那些:如果n = -1,那么根本就没有屏蔽,如果n = 0,显然结果为零。

但除非您对ab有一些具体的保证,否则它不适用于其他任何事情。