美文网首页
面试题15:二进制中1的个数

面试题15:二进制中1的个数

作者: 修司敦 | 来源:发表于2018-11-15 00:55 被阅读0次
请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。

解析:有两个解法:第一种是类似于独热的扫描,从右到左扫描,当扫描到当前位为 1 就给计数器加一。第二种是从右到左依次把 1 变成 0,这里用到的一个技巧是 n \& (n-1) 可以把 n 的二进制表示中的最右边的 1 变成 0。变一次就给计数器加一。


答案:

int NumberOf1_Solution1(int n)
{
    int cnt = 0, flag = 1;

    while (flag) //flag 左移 31 次之后,再左移就变成 0 了
    {
        if (n&flag) ++cnt;
        flag <<= 1;
    }
    return cnt;
}

int NumberOf1_Solution2(int n)
{
    int count = 0;

    while (n)//n 中最左边的那个 1 被消除之后,n 就变成了 0
    {
        ++count;
        n &= n-1; //将 n 的最右边的 1 变成 0
    }

    return count;
}

相关文章

  • 二进制中1的个数

    《剑指offer》面试题15:二进制中1的个数 题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表...

  • 2.4.5 位运算

    面试题15:二进制中1的个数主要思想:把一个整数减去1,再和原整数做与运算,就会把该整数最靠近右边的1变成0,直到...

  • 面试题15:二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 二进制数的范围以及原码补码的区别 以八...

  • 面试题15:二进制中1的个数

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

  • 面试题15:二进制中1的个数

    输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路一:依次右移判断是否是奇数,也就是判断最后一...

  • 面试题15:二进制中1的个数

    题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如,把9表示成二进制是1001,有两个1。因此...

  • 面试题15:二进制中1的个数

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

  • 面试题15:二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 知识点 进制转换,位运算 Qiang的...

  • 15:二进制中1 的个数

    题目15:二进制中1 的个数 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。 举例说明 例如,把9表...

  • 《剑指 Offer (第 2 版)》第 15 题:二进制中 1

    第 15 题:二进制中 的个数 传送门:二进制中 的个数,牛客网 online judge 地址。 输入一个 ...

网友评论

      本文标题:面试题15:二进制中1的个数

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