方法1:
代码如下
int GetBitNumber(int number)
{
int cnt=0;
while(number!=0)
{
if(number%2==1)
{
cnt++;
}
number/=2;
}
return cnt;
}
int main()
{
int k = 0;
k=GetBitNumber(12345);
printf("%d\n",k);
return 0;
}
该代码是由十进制数转二进制数的方法得来的,十进制数转二进制时会对2求余,余数就是二进制数的一位,然后自除2,最终当十进制数为0终止,上述代码也一样,如果number对2求余所得的数为1,说明number由十进制转化成的二进制数里就有一个1,所以cnt++,最终cnt为二进制数里1的个数。
int GetBitNumber(int number)
{
int cnt=0;
while(number!=0)
{
cnt++;
number=number&(number-1);
}
return cnt;
}
int main()
{
int k = 0;
k=GetBitNumber(12345);
printf("%d\n",k);
return 0;
}
该代码是由&位运算的特性得来的,number&(number-1)会将number转化成的二进制数里最低位的1变为0,最终循环执行了几遍,number转为二进制数里面就有几个1,循环走一遍cnt++,最终cnt里就是number转二进制数后里面1的个数。