Java算法:计算一个二进制整数中有几个1

Souts 2021年03月31日 471次浏览

计算一个二进制整数中有几个1

代码
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int i = scanner.nextInt();
        System.out.println(Integer.toString(i,2));
        int count = 0;
        for (int j = 0; j < 32; j++) {
            if ((i&(1<<j))==1<<j){
                count++;
//                System.out.println("i="+i);
//                System.out.println("j="+j);
//                System.out.println("1<<j="+(1<<j));
//                System.out.println("count="+count);
            }
        }
        System.out.println(count);
    }
分析

首先使用Scanner获取用户输入

如果输入10

将10转换为二进制为1010

一个整数类型占用32位二进制,所以需要循环32次

在循环中将10与1<<向右移位进行与运算

即 (i&(1<<j))==1<<j)

当j==0时 1<<j为1

输入的i为10

10&1转换为二进制计算

1010 & 1 结果为0 与1<<j不相等

当j==1时 1<<j为2

输入的i为10

10&2转换为二进制计算

1010 & 10 结果为10 与1<<j的2转换为二进制10相等 则count+1

以此类推 可计算出一个二进制整数中有几个1

运行演示

iShot20210331 15.32.02.png