按位与:a&b是把a和b都转换成二进制数然后再进行与的运算;
逻辑与:a&&b就是当且仅当两个操作数均为 true时,其结果才为 true;只要有一个为零,a&&b就为零。
x=9999
int func(x)
{
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
}
x = 9999 时,x-1=9998,用二进制表示
10011100001111
10011100001110
当他们执行&运算并赋值给x,结果x为
10011100001110
此时x-1为
10011100001101
当他们执行&运算并赋值给x,结果x为
10011100001100
如此类推到结果为00000000000000,应该发现x = x&(x-1)就是将x最右边的二进制位1变为0。x为9999时二进制为1的位有8个,所以结果为8
时间: 2024-12-28 17:47:56