美文网首页
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

作者: 霍运浩 | 来源:发表于2019-02-23 14:35 被阅读0次

1 常规解法

首先将n和flag=1进行与运算 如果n最低位为1,则count++
然后flag右移一位再和n的次低位进行与运算,如果次低位是1 则count++
重复此过程直到flag移动到最高位。

public int NumberOf1(int n) {
           int flag=1;
           int count=0;
           for(int i=0;i<32;i++){
                
                if((n&flag)!=0){
                    count++;
                }
                flag=flag<<1;
            }
            return count;
}

or
将n变为二进制 然后循环判断每一位是否为1;

public int NumberOf1(int n) {
        
         String str=Integer.toBinaryString(n);
         int count =0;
        
         for(int i=0;i<str.length();i++){
             
             if(str.charAt(i)=='1'){
                 count++;
             }
         }
         
         return count;
         
     }

2.特殊解法

当一个数减去1 那个这个数最右边的1之后的0将会变成1,最右边的1左边不变,然后这个数和这个数-1进行与运算,那么这个数最右边的1将会0 循环此过程 直到这个数全部变为0;
ex: 10的二进制是 1010 10-1的二进制是1001 相与结果为1000 10这个数最右边的1变为o 以此类推
最终10会变为0

public int NumberOf1(int n) {
         int count=0;
        while(n!=0){
            n=n&(n-1);
            count++;
        }
         return count;
}

相关文章

  • 二进制中1的个数

    输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

  • 二进制中1的个数

    输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

  • 【前端】剑指offer题解每日一更

    题目 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 解法

  • 二进制中1的个数

    题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

  • 二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

  • 11-二进制中1的个数-补码-toString()的巧用

    题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 代码

  • 11二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 Java实现

  • 二进制中1的个数

    输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。 C++ 代码

  • 二进制中1的个数

    题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。2中方法:

  • 二进制中1的个数

    输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路:整数的范围为(-232----232-1)...

网友评论

      本文标题:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

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