按位与运算符 & 有何作用?在这个代码片段中做什么?
请帮忙解决这个问题并解释一下逻辑。 我不知道 & 如何操作员在这里工作。
void main() {
int a = -1;
static int count;
while (a) {
count++;
a &= a - 1;
}
printf("%d", count);
}
Please help to solve this problem and explain the logic.
I don't know how the & operator is working here.
void main() {
int a = -1;
static int count;
while (a) {
count++;
a &= a - 1;
}
printf("%d", count);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您指的是
,那么它是 a 和 a-1 的按位与运算,然后复制到 a 中。
编辑:
正如评论中从 Tadeusz A. Kadłubowski 复制的:
If you are referring to
then it is a bitwise and operation of a and a-1 copied into a afterwards.
Edit:
As copied from Tadeusz A. Kadłubowski in the comment:
表达式
a&=a-1;
清除a
的最低有效位(最右边的1)。该代码计算a
中的位数(本例中为 -1)。开始于
代码在 32 位整数配置上输出
32
。The expression
a&=a-1;
clears the least significant bit (rightmost 1) ofa
. The code counts the number of bits ina
(-1 in this case).Starting from
The code outputs
32
on an 32 bit integer configuration.&
是按位与运算符。其操作
相同:
清除
a
的最低有效位。因此,您的程序实际上正在计算
a
中设置的位数。由于
count
被声明为static
,它将自动初始化为0
。&
is the bitwise and operator.The operation
which is same as:
clears the least significant bit of
a
.So your program effectively is calculating the number of bits set in
a
.And since
count
is declared asstatic
it will automatically initialized to0
.你有未初始化的计数
应该是
operator &称为 AND http://en.wikipedia.org/wiki/Bitwise_operation#AND
you have count uninitialized
should be
operator & is called AND http://en.wikipedia.org/wiki/Bitwise_operation#AND