按位AND运算符&做什么?

请帮助解决这个问题并解释逻辑。 我不知道&运营商是如何在这里工作的。

void main() { int a = -1; static int count; while (a) { count++; a &= a - 1; } printf("%d", count); } 

如果你指的是

 a&=a-1; 

然后它是一个按位和a和a-1的操作复制到后来。

编辑:在评论中从TadeuszA.Kadłubowski复制:

 a = a & (a-1); 

表达式a&=a-1; 清除a的最低有效位(最右边1)。 代码计算a的位数(在这种情况下为-1)。

从…开始

 a = -1 ; // 11111111 11111111 11111111 11111111 32bits signed integer 

代码在32位整数配置上输出32

&是按位和运算符 。

操作

 a&=a-1; 

这与:

 a = a & a-1; 

清除a的最低位。

所以你的程序有效地计算了a设置的位数。

由于count被声明为static ,它将自动初始化为0

你没有初始化

应该

 static int count=0; 

运算符&称为AND http://en.wikipedia.org/wiki/Bitwise_operation#AND