美文网首页
2018-10-26

2018-10-26

作者: 多多多_91fe | 来源:发表于2018-10-26 17:13 被阅读0次

小算法

        对于任意非负整数,同级其二进制展开中数为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;
}

相关文章

网友评论

      本文标题:2018-10-26

      本文链接:https://www.haomeiwen.com/subject/hgdltqtx.html