美文网首页
输入一个整数,输出该数二进制表示中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的个数。其中负数用补码表示。

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