2018-10-26

小算法

        对于任意非负整数,同级其二进制展开中数为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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,199评论 0 13
  • 摘要: 1 shuffle原理 1.1 mapreduce的shuffle原理 1.1.1 map task端操...
    liuzx32阅读 527评论 0 0
  • 几百万买断的爱情 文/一瞬 “我们每一次争吵过后,我就当掉一分对你的爱意。 现在的我,无爱一身轻。” 一、 “我妈...
    大故事家阅读 395评论 1 6
  • 梅因:迄今为止,所有社会进步的运动,是一个“从身份到契约”的运动。我们正处于从身份到契约的转型期;也就是交易的对象...
    栋鸿阅读 430评论 0 1
  • 西洲曲【译文】 思念梅花很想去西洲,去折下梅花寄去长江北岸。 (她那)单薄的衣衫像杏子那样红,头发如小乌鸦那样黑。...
    淼淼hua阅读 793评论 8 6