按位与运算符 & 有何作用?在这个代码片段中做什么?

发布于 2024-10-20 01:04:20 字数 206 浏览 6 评论 0原文

请帮忙解决这个问题并解释一下逻辑。 我不知道 & 如何操作员在这里工作。

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

叹梦 2024-10-27 01:04:20

如果您指的是

a&=a-1;

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

编辑:
正如评论中从 Tadeusz A. Kadłubowski 复制的:

a = a & (a-1);

If you are referring to

a&=a-1;

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 & (a-1);
寄居人 2024-10-27 01:04:20

表达式a&=a-1; 清除a 的最低有效位(最右边的1)。该代码计算 a 中的位数(本例中为 -1)。

开始于

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

代码在 32 位整数配置上输出 32

The expression a&=a-1; clears the least significant bit (rightmost 1) of a. The code counts the number of bits in a (-1 in this case).

Starting from

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

The code outputs 32 on an 32 bit integer configuration.

或十年 2024-10-27 01:04:20

&按位与运算符

其操作

a&=a-1;

相同:

a = a & a-1;

清除a的最低有效位。

因此,您的程序实际上正在计算 a 中设置的位数。

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

& is the bitwise and operator.

The operation

a&=a-1;

which is same as:

a = a & a-1;

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 as static it will automatically initialized to 0.

甚是思念 2024-10-27 01:04:20

你有未初始化的计数

应该是

static int count=0;

operator &称为 AND http://en.wikipedia.org/wiki/Bitwise_operation#AND

you have count uninitialized

should be

static int count=0;

operator & is called AND http://en.wikipedia.org/wiki/Bitwise_operation#AND

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文