二进制中1的个数(Java实现)

问题: 输入一个整数,求其二进制中1的个数

看到这个问题,我们应该想到数的位运算

解法一:我们每次将此数&1 ,如果结果等于1,证明此数的最后一位是1,,count++; 然后在将数右移一位,

循环下去,直到此数==0,即可统计出其中1的个数

Test1:

 1  private static int getNum1(int i) {
 2         int count=0;
 3         while (i!=0){
 4             if((i&1)==1){
 5                 count++;
 6             }
 7             i= i>>1;
 8         }
 9         return count;
10     

缺点:这种情况只能适用于正整数,当为负数时,负数循环右移时是用1来填前面空缺的位置,所以永远都不会等于0,陷入死循环

解法二:我们的分析就是:把一个整数减去1。再和原整数做与运算,会把该整数最右边的一个1变成0.那么一个整数的二进制表示中有多少个1,就能够进行多少次运算。

基于这种思路。我们能够写出这种代码:

Test2:

   private static int getNum1(int i) {
        int count=0;
        while (i!=0){
            i=i&(i-1);
            count++;
        }
        return count;
    }

这样操作,无论数是正还是负都可以完美求出1的个数

解法三:我们调用Integer的方法,将i的二进制转为字符串,再依次遍历其中1的个数,也可以完美解决。

Test3:

    private static int getNum1(int i) {
        int count=0;
     String str=Integer.toBinaryString(i);
        for (int j = 0; j <str.length() ; j++) {
            if(str.charAt(j)=='1'){
                count++;
            }
        }
        return count;
    }

 

posted @ 2019-07-21 13:58  杰哥!  阅读(3017)  评论(0编辑  收藏  举报
/*scroll to top 火箭按钮*/