求二进制中1的个数

前言:

本篇博客将带大家了解如何求一个整数,在内存当中存储时,二进制1的个数


介绍本题解题思路之前先介绍一个知识点:按位与(&)

&(按位与)---->只要有0就是0

举例:

0000101010100111&0101001010010101---->?


思路一:

看到此题,很自然我们脑海里会思考如何通过代码来实现判断二进制里放的是1还是0,于是乎,按位与(&)便冒出来了。当一个数按位与1时,若该数的二进制形式最右边的数是0,则结果就是0,若是1,则结果就是1。有了可以对二进制表示形式中的最后一位存放的内容的判断方法以后,我们便可以通过循环来实现对每一位的存放内容来进行判断。

代码一:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        //输入待判断的数字:
        System.out.println("请输入待判断的数字:");
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        //进行判断
        int tmp = n;
        int count = 0;//用来计数
        while(tmp != 0){
            if((tmp&1) == 1){
                count ++;
            }
            tmp >>>=1;
            //注意这里一定要是无符号右移,
            //如果是有符号右移,n为负数时左边会补1,
            //达不到想要的效果
        }
        System.out.println(n+"的二进制形式中有"+count+"个1");
    }
}

结果:

多组输入:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        //输入待判断的数字:
        System.out.println("请输入待判断的数字:");
        Scanner scanner = new Scanner(System.in);
        while(scan.hasNextInt()){
        int n = scanner.nextInt();
        //进行判断
        int tmp = n;
        int count = 0;//用来计数
        while(tmp != 0){
            if((tmp&1) == 1){
                count ++;
            }
            tmp >>>=1;
        }
        System.out.println(n+"的二进制形式中有"+count+"个1");
        }
    }
}

代码二:

import java.util.Scanner;
public class Main {
  public static void main(String[] args) {
        //输入数字:
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextInt()){
            int n = scan.nextInt();
            //计算其二进制中1的个数:
            int count = 0;
            for (int i = 0; i < 31; i++) {//i < 31确保了不会把符号位计算在内
                if(((n >>> i) & 1)!=0){
                    count ++;
                }
            }
            System.out.println("该整数的二进制形式中有"+count+"个1");
        }
    }

结果:


思路二:

一个数按位与比它小一的数,一直到结果是0,按位与的次数就是该数二进制形式中1的个数

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        //输入数字:
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextInt()){
            int n = scan.nextInt();
            //计算其二进制中1的个数:
            int count = 0;
            while(n != 0){
                n = n & (n-1);
                count ++;
            }
            System.out.println("该整数的二进制形式中有"+count+"个1");
        }
    }
}

 结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值