3

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

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

4 回答 4

5

如果你指的是

a&=a-1;

然后是 a 和 a-1 的按位运算,然后复制到 a 中。

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

a = a & (a-1);
于 2011-03-04T10:04:22.630 回答
3

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

从...开始

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

代码32以 32 位整数配置输出。

于 2011-03-04T10:06:38.220 回答
2

&按位和运算符

操作

a&=a-1;

这与:

a = a & a-1;

清除 的最低有效位a

因此,您的程序有效地计算a.

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

于 2011-03-04T10:06:29.410 回答
0

你有未初始化的计数

应该

static int count=0;

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

于 2011-03-04T10:06:31.213 回答