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

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;
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容