什么是有效的解决方法
(A & N) + (B & N) + (C & N) ..
等等。
其中&
代表位智操作。
A
,B
,C
,N
都是正整数。
是否可以减少计算量。
答案 0 :(得分:1)
如果你正在组合位掩码,那么你可能得到你需要的东西:(A & N) | (B & N) |...
在这种情况下,你会做得更好(A | B | C | ...)& Ñ
N.B。如果N = 0x0020
和A = 0x003f
,B=0x0a25
则:
(A & N) + (B & N) = 0x0040
但
(A|B)&N = 0x0020
这通常是组合位字段时所需要的。
答案 1 :(得分:1)
不,它不会起作用。你总是有这样的危险,即掩盖区域中的添加会弄乱你的数据。
,例如N = 0x0020, A = 0x001f, B=0x002f
或N = 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
,使其适用于所有a
和b
。
只有两个结果。 -1和0是有意义的。它适用于那些:如果n = -1
,那么根本就没有屏蔽,如果n = 0
,显然结果为零。
但除非您对a
和b
有一些具体的保证,否则它不适用于其他任何事情。