请实现一一个函数,输入一个整数,输出该数二进制表示中1的个数。
例: 9的二进制表示为1001,有2位是1
import java.util.Scanner;
public class _03_1的个数 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
System.out.println(Integer.toString(N, 2));
int count = 0;
//比对每一位,使比对的1向左移动
for (int i = 0; i < 32; i++) {
if ((N & (1 << i)) == (1 << i)) {
count++;
}
}
System.out.println(count);
//比对每一位,使需要比对的数字向右移
count = 0;
for (int i = 0; i < 32; i++) {
if (((N >>> i) & 1) == 1)
count++;
}
System.out.println(count);
//强大的解题方法,每次-1 and & 一次,就会消除1个二进制1
count = 0;
while (N != 0) {
N = ((N - 1) & N);
count++;
}
System.out.println(count);
}
}
要点解析:
1. Integer.toString(N, 2) 将N转换为2进制
2. N = ((N - 1) & N); 将会消除从低位到高位的二进制1
Tags:位运算
2021年2月15日