解法1
int Count(unsigned int v)
{
int num=0;
while(v)
{
num += v & 0x01;
v>>=1;
}
return num;
}
算法复杂度log2 v
解法2
int Count(unsigned int v)
{
int num=0;
while(v)
{
v&=(v-1);
num++;
}
return num;
}
算法复杂度O(M),M为1的个数
扩展问题:求两个整数中有多少位是不同的,应用解法1.
int diff(unsigned int a, unsigned int b)
{
int num=0;
while(a && b)
{
if((a & 0x01 == 0x01) && (b & 0x01 == 0x01))
{
num++;
}
a>>=1;
b>>=1;
}
return num;
}