小算法
对于任意非负整数,同级其二进制展开中数为1的总数
有两种比较妖的做法,都是通过位运算的方式实现:
-
1 & n
方式:
int countOnes(unsigned int n)
{
int ones = 0;
while (0 < n)
{
ones += (1 & n); //取二进制的末位,叠加
n >>= 1;
}
return ones;
}
-
n & (n-1)
方式:
int numOnes(unsigned int n)
{
int ones = 0;
while (n) //有多少个1,则该操作可执行多少次
{
n = n & (n-1);
ones++;
}
return ones;
}
网友评论