按位AND运算符&做?

时间:2011-03-04 10:01:12

标签: c bitwise-and

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

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

4 个答案:

答案 0 :(得分:5)

如果您指的是

a&=a-1;

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

编辑: 正如TadeuszA.Kadłubowski在评论中复制的那样:

a = a & (a-1);

答案 1 :(得分:3)

表达式a&=a-1;清除a的最低有效位(最右边1)。代码计算a中的位数(在本例中为-1)。

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

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

答案 2 :(得分:2)

&bitwise and operator

操作

a&=a-1;

与:

相同
a = a & a-1;

清除a的最低有效位。

因此,您的程序有效地计算a中设置的位数。

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

答案 3 :(得分:0)

你没有被初始化

应该是

static int count=0;

运营商&被称为AND http://en.wikipedia.org/wiki/Bitwise_operation#AND

相关问题