按位AND运算符&做什么?

use*_*593 3 c bitwise-and

请帮助解决这个问题并解释逻辑.我不知道&运营商是如何在这里工作的.

void main() {
   int a = -1;
   static int count;
   while (a) {
      count++;
      a &= a - 1;
   }
   printf("%d", count);
}
Run Code Online (Sandbox Code Playgroud)

Tob*_*rre 5

如果你指的是

a&=a-1;
Run Code Online (Sandbox Code Playgroud)

然后它是一个按位和a和a-1的操作复制到后来.

编辑:在评论中从TadeuszA.Kadłubowski复制:

a = a & (a-1);
Run Code Online (Sandbox Code Playgroud)

  • 它几乎与"a = a&(a-1);"相同 (2认同)