请帮助解决这个问题并解释逻辑。我不知道 & 运算符在这里是如何工作的。
void main() {
int a = -1;
static int count;
while (a) {
count++;
a &= a - 1;
}
printf("%d", count);
}
请帮助解决这个问题并解释逻辑。我不知道 & 运算符在这里是如何工作的。
void main() {
int a = -1;
static int count;
while (a) {
count++;
a &= a - 1;
}
printf("%d", count);
}
如果你指的是
a&=a-1;
然后是 a 和 a-1 的按位运算,然后复制到 a 中。
编辑:从 Tadeusz A. Kadłubowski 在评论中复制:
a = a & (a-1);
该表达式a&=a-1;
清除 的最低有效位(最右边的 1)a
。a
该代码计算(在这种情况下为-1)中的位数。
从...开始
a = -1 ; // 11111111 11111111 11111111 11111111 32bits signed integer
代码32
以 32 位整数配置输出。