一般的移位想法大家都能想到,但是整数和减1的结果进行AND,还是没有想到。
得到新数字与原来整数相比,只有最后一个1变成0.
int numOneInBinary(int number)
{
int numOne=0;
while(number!=0)
{
number=number & (number-1);
numOne++;
}
return numOne;
}
后来看来一个解决方案,用查找表,复杂度瞬间降低好多。
int countOf1(int n)
{
int c=0;
if(n<0){c++;n&=(1<<(sizeof(int)*8-1));}
while(n!=0)
{
c+=tab[n&0xff];
n>>=8;
}
return c;
}