美文网首页
面试题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


    看完整源码戳源码地址

    相关文章

      网友评论

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

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