计算一个数的二进制数中1的个数

package test24;
import java.util.Scanner;
public class Tesk {
    
    
public static void main(String[] args) {
    
    
    System.out.println("请输入一个数: ");
    Scanner input = new Scanner(System.in);
    int num = input.nextInt();
    int count = 0;
    for(int i = 0;i < 32;i++){
    
    
        if(((num>>i) & 1) == 1){
    
    
            count ++;
        }
    }
    System.out.println("1的个数是:"+count);
}
}

上面这个代码可以计算出正确结果,但是当输入数较小时,他做了很多次无用计算,效率太低,所以我们做以下改进:
在这里插入图片描述
我们每次让 n & n-1 ,与 的次数就是 1 的个数

package test24;
import java.util.Scanner;
public class Tesk {
    
    
public static void main(String[] args) {
    
    
    System.out.println("请输入一个数: ");
    Scanner input = new Scanner(System.in);
    int num = input.nextInt();
    int count = 0;
    while(num != 0){
    
    
            count++;
            num = num & (num - 1);
        }
        System.out.println("该数的二进制中共有"+count+"个1");
    }
}

结果展示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45658339/article/details/108807671