加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:20:49 所属栏目:Java 来源:网络整理
导读:问题: 输入一个整数,求其二进制中1的个数 看到这个问题,我们应该想到数的 位运算 : 解法一:我们每次将此数1 ,如果结果等于1,证明此数的最后一位是1,,count++; 然后在将数右移一位, 循环下去,直到此数==0,即可统计出其中1的个数 Test1: 1 privat

问题: 输入一个整数,求其二进制中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;
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读