求一个数的二进制中1的个数方法很多,在这里我总结最近学到的两种简单好用的方法:
(1)简单法:
由于右移运算符的特性,每向右移动一位,相当于二进制的最低位就被消除高位补零,其功能相当于该数每次除以2。
利用上述原理,每次让二进制的最低位和1进行与运算.若该位是1,则记一次数.然后右移1位;继续上述运算,直到为零。
代码实现:
int count (int n )
{
int i ;
for (i = 0; n ; )
{
if(n&1==1) i++;
n>>=1;
}
return i;
}
(2快速法:
之所以叫快速法,是因为其在求解时并不关注二进制的位数,其的效率由该二进制中1的个数决定.即每次让其最低位为1的归零,能进行多少次,说明该数的二进制表示中
就有多少个1.
代码实现:
int count (int n )
{
int i ;
for (i = 0; n ; i++)
{
n&=(n-1);
}
return i;
}