按位与: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