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

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

作者: 小庄bb | 来源:发表于2017-09-05 12:10 被阅读12次

题目要求

输入一个整数,输出该数二进制表示中1的个数,例如:把9表示成二进制是1001,那么函数输出2

题目解析

思路一:

  • 分析

除非n==0;那么二进制表示中必然存在1。
我们可以发现当我们给一个整数-1时,这个整数二进制表示中最右面的1将变为0,而其右边如果有0将全变为1;
此时我们将(n-1) & n ,可以直接消除掉最右面的1。
重复至n==0,循环次数即为1的个数。

  • 代码段
public static int getNumOfOne(int n) {
        
        int num = 0 ;
        
        while(n!=0) {
            num ++ ;
            n = (n-1) & n ;
        }
        
        return num ;
    }

测试代码

    public static void main(String[] args) {
        System.out.println(getNumOfOne(9));
        System.out.println(getNumOfOne(1));
        System.out.println(getNumOfOne(0x7fffffff));
        System.out.println(getNumOfOne(0xffffffff));
        System.out.println(getNumOfOne(0x80000000));
        System.out.println(getNumOfOne(0));
        System.out.println(getNumOfOne(-5));
    }
    

运行结果

2
1
31
32
1
0
31


看完整源码戳源码地址

相关文章

  • 二进制中1的个数

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

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

    题目要求 输入一个整数,输出该数二进制表示中1的个数,例如:把9表示成二进制是1001,那么函数输出2 题目解析 ...

  • 15-二进制中1的个数

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

  • 2.4.5 位运算

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

  • LeetCode 每日一题 [48] 二进制中1的个数

    LeetCode 二进制中1的个数 [简单] 请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如...

  • 剑指offer(Java版)day03:二进制中1的个数|数值的

    1二进制中1的个数 【题目】输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 【考察点】位运算 【...

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

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

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

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

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

    题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 代码实现 主要思路 1、首先因为位运算...

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

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

网友评论

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

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