这是一个很经典的算法题,方法有很多,这里只写自己会的几个。
方法一 移位
算法:
int bitCont(unsigned int n)
{
int c=0; //1的个数
while(n>0)
{
c+=n&1;
n>>=1; //右移1位,相当于减一
}
return c;
}
通过移位,算法简单易懂,就不做详细讲解了。注意循环次数等于n的位数,若n是32位的,则循环32次。
方法二
算法:
int bitCount(unsigned int n)
{
int c=0; //1的个数
while(n>0)
{
c++;
n=n&(n-1);
}
}
该方法运算速度快,与1的个数有关,同N的大小无关