什么将是有效的解决方法
(A & N) + (B & N) + (C & N) ..
等等。其中&
代表按位与运算。和A
, B
, C
,N
都是正整数。是否可以减少计算量。
问问题
146 次
3 回答
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
===========
于 2013-08-25T09:33:14.897 回答
1
如果你正在组合位掩码,那么你可能会得到你需要的东西:(A & N) | (B & N) |...
在这种情况下,你会用 (A|B|C|...) & N 做得更好。
注意如果N = 0x0020
和A = 0x003f
,B=0x0a25
那么:
(A & N) + (B & N) = 0x0040
但
(A|B)&N = 0x0020
这通常是组合位字段时需要的。
于 2013-08-25T07:17:24.760 回答
0
如其他答案所示,这通常不起作用。事实上,它通常不会。
不是在这里宣传我自己的东西,但是这个网站可以解决这样的事情。例如,如果您输入
solve[n] (a & n) + (b & n) == (a + b) & n
这意味着“求解 n 使得对于每个 a, b, (a & n) + (b & n) == (a + b) & n
”
换句话说,找到n
使它适用于所有a
's 和b
's 的东西。
结果只有两个。-1 和 0。它适用于以下情况是有道理的:如果n = -1
,则根本没有掩蔽,如果n = 0
,显然结果为零。
但它不适用于其他任何东西,除非你对a
's 和b
's 有一些具体的保证。
于 2013-08-25T09:59:25.917 回答