{
int res = 0;
while(n != 0)
{
n -= n & (~n + 1);
res++;
}
return res;
}
每次进行n -= n & (~n + 1)操作时就是移除最右边1的过程。n & (~n + 1)的含义就是得到n中最右边的1。例如,n = 01000100, n & (~n + 1) = 00000100, n - n & (~n + 1) = 01000000。
另一种移除右边1的方法 用n & (n-1)
int count3(int n)
{
int res = 0;
while(n != 0)
{
n = n & (n-1);
res++;
}
return res;
}