问题:求二进制数中1的个数。
思路:对二进制数的每一位与1进行与运算,结果为1,结果加1,否则结果加0。
代码:
int Count(unsigned int v)
{
int num = 0;
while(v)
{
num += v & 0x1;
v >>= 1;
}
return num;
}
思路二:若二进制数大于零,计数+1,将二进制数的最右首的1置0,重复判断计数与置0。
代码:
int Count2(unsigned int v)
{
int num = 0;
while(v)
{
v &= v - 1;
num++;
}
return num;
}
测试:
int main()
{
int num = 9;
printf("Count of BIT one in 0x%x : %d \n",num,Count(num));
num = 239;
printf("Count of BIT one in 0x%x : %d \n",num,Count2(num));
getchar();
}
结果:
Count of BIT one in 0x9 : 2
Count of BIT one in 0xef : 7
REF:
1,编程之美