计算一个32位无符号整数在二进制中1的个数.
如2015, 它的16进制表示是0x7DF,2进制是11111011111, 在二进制中1的个数是10.
(可以用windows里的计算器,选择程序员,来算16进制和2进制)
下面的实现,是一个很简单,没有优化的方法.
#include "stdafx.h"
int GetOneCount(unsigned int n)
{
int count=0;
for(int i=0;i<32;i++)
{
if(n&1)
count++;
n=n>>1;
}
return count;
}
void main()
{
unsigned int n1=0x7fffffff;
unsigned int n2=0xffff;
unsigned int n3=2015;
printf("n1=%x %d\n",n1,GetOneCount(n1));
printf("n2=%x %d\n",n2,GetOneCount(n2));
printf("n3=%d %d\n",n3,GetOneCount(n3));
}