请帮助解决这个问题并解释逻辑。 我不知道&运营商在这里工作。
void main() {
int a = -1;
static int count;
while (a) {
count++;
a &= a - 1;
}
printf("%d", count);
}
答案 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)
操作
a&=a-1;
与:
相同a = a & a-1;
清除a
的最低有效位。
因此,您的程序有效地计算a
中设置的位数。
由于count
被声明为static
,它会自动初始化为0
。
答案 3 :(得分:0)