按位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
。