33,027
社区成员




int Fun(int nValue)
{
int nCount = 0;
while (nValue)
{
nValue = nValue&(nValue-1);
++nCount;
}
return nCount;
}
n为奇数(n的二进制表示的末位为1):
n: xxxxxxxx1
n-1: xxxxxxxx0
n&(n1-): xxxxxxxx0
相当于去掉最右边的一个1。
n为偶数且不等于0(n的二进制表示的末位为0):
n: xxxxx1000
n-1: xxxxx0111
n&(n1-): xxxxx0000
也是相当于去掉最右边的一个1。