问题:C语言的循环相关问题

img


上面结果为什么是4啊?mask<<=1是啥意思啊?求详细解答

mask <<= 1就是 mask = mask << 1
也就是 mask = mask * 2
<<二进制是向左移一位
mask一开始是1,只有x的最低位是1,x & 1 = 1(两者都是1,返回1,否则0)
然后 mask 依次变成了 2 4 8 ... 也就是2进制的 10 100 1000 ... 和上面同理,依次测试 x 是否倒数第二位,第三位,……是1
这段代码的意思是输入一个数字,输出它有几个1
23的二进制是 10111,所以有4个1,输出4