按位与: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
本文出自 “DamenMai学习之路” 博客,转载请与作者联系!
原文地址:http://9492221.blog.51cto.com/9482221/1564960