要返回一个参数中二进制的1的个数,可以采用如下三种方法:
1.除2取余法:
int count_one_bits(unsigned int value)
{
int count = 0;
while(1==value%2)
{
count += 1;
value = value / 2;
}
return count;
}
方法一只可以进行正数运算。
2.移位法:
int count_one_bits(unsigned int value)
{
int count = 0;
while(1&&value)
{
count += 1;
value = value>>1;
}
return count;
}
>>右移运算符;右移时负数补1、正数补0,value>>1指右移1位
3.按位与:
int count_one_bits(unsigned int value)
{
int count = 0;
while(value)
{
count += 1;
value = value&(value-1);
}
return count;
}
每次将参数中一个1消除。