码迷,mamicode.com
首页 > 其他好文 > 详细

《剑指offer》第十五题:二进制中1的个数

时间:2020-03-23 23:35:17      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:一个   ret   turn   1的个数   mamicode   class   分析   去掉   clu   

// 面试题15:二进制中1的个数
// 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如
// 把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。

#include <cstdio>

int NumberOf1_Solution1(int n)
{
    //主要思路:逐位与运算
    int count = 0;
    unsigned int flag = 1;
    while (flag)
    {
        if (n & flag)
            ++count;

        flag = flag << 1;
    }
    return count;
}

int NumberOf1_Solution2(int n)
{
    //主要思路:n-1 & n 相当于去掉二进制最右边1
    int count = 0;

    while (n)
    {
        ++count;
        n = (n - 1) & n;
    }
    return count;
}

分析:思路2牛逼!

把一个整数减去1之后再和原来的整数做位与运算,得到的结果相当于把整数的二进制表示中最右边的1变成0。

 

技术图片

 

《剑指offer》第十五题:二进制中1的个数

标签:一个   ret   turn   1的个数   mamicode   class   分析   去掉   clu   

原文地址:https://www.cnblogs.com/ZSY-blog/p/12556085.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!