int a = 2;
a = (a&-a);
那么这个块中'&'的目的是什么?
结果是“2”
这就是按位“与”运算符。有更多空间可能会更清晰
a = a & -a;
甚至
a = a bitand -a;
这是按位和运算符。看看http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
的组合a & -a
可用于查找已设置的最低有效位。例子:
12 = 00001100
-12 = 11110100
--------------
12 & -12 = 00000100
是&
按位与,但完整语句的作用是过滤掉1
数字中的第一个,例如
a 11010
~a 00101
-a 00110
a&-a 00010
它是按位的and
,本质上,它需要 2 个变量,并且对于每个位,只有当两个数字1
在那个位置都有 a 时,它才是 1
所以它a
是
11101010
比-a
可能在两个人的恭维中表现得像
00010110
所以如果你和他们在一起你会得到
11101010
00010110
---------------
00000010