JavaSE基础50题:7. 写一个方法返回参数二进制中1的个数(3种方法!)

文章目录

    • 概述
    • 方法1
    • 方法2
    • 方法3

概述

返回参数中二进制中1的个数。 如: 15(十进制) —— 0000 1111(二进制) —— 4个1

①我们把二进制的数字的每一位都&1,其中:1&1=1 、0&1=0
②用无符号右移(>>>)来让每一位都与1相比较。

JavaSE基础50题:7. 写一个方法返回参数二进制中1的个数(3种方法!)_第1张图片

方法1

【概述】
用 for 循环,参数是32位的,所以我们循环32次。
【代码】

import java.util.Scanner;

 public static void fac1(){
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int count = 0;
            for (int i = 0; i < 32; i++) { //有32位,移32次
                if (((n >>> i) & 1)== 1) {
                    count++;
                }

            }
            System.out.println(count);
        }

    public static void main(String[] args) {
        fac1();
    }

【运行结果】
JavaSE基础50题:7. 写一个方法返回参数二进制中1的个数(3种方法!)_第2张图片

方法2

【概述】
用while循环来做,直接比较n是否为0,这样就不用管循环了多少次。

【代码】

 public static void fac2() {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int count = 0;

        while (n != 0) {
            if ((n & 1) == 1) {
                count++;
            }
            n = n >>> 1;
        }
        System.out.println(count);
    }
public static void main(String[] args) {
       fac2();
       }

【运行结果】
JavaSE基础50题:7. 写一个方法返回参数二进制中1的个数(3种方法!)_第3张图片

方法3

【概述】
用参数n & (n-1),每&一次都会少一个1,直到结果为0的时候结束。
如:7
JavaSE基础50题:7. 写一个方法返回参数二进制中1的个数(3种方法!)_第4张图片
【代码】

 public static void fac3() {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int count = 0;

        while (n != 0) {
            n = n & (n-1);
            count++;
        }
        System.out.println(count);
    }
    public static void main(String[] args) {
        fac3();
    }

【运行结果】
JavaSE基础50题:7. 写一个方法返回参数二进制中1的个数(3种方法!)_第5张图片

你可能感兴趣的:(Java题库,java,开发语言,学习方法,idea)