位运算操作不能小看它哦。
设二进制的位数为m, 1的个数为n。
1.时间复杂度为O(m)的算法
int count(long b)
{
int n;
for (n = 0;b;b >>= 1)
if (b & 1) n++;
return n;
}
2. 时间复杂度为O(n)的算法
int count2(long b)
{
int n;
for (n = 0;b;n++)
b &= b - 1;
return n;
}