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

题目要求

输入一个整数,输出该数二进制表示中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


看完整源码戳源码地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容