Java算法–第一章–位运算符(4)二进制中1的个数
题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。
例:9的二进制表示为1001,有2位是1.
方法1:
package exer1;
import java.util.Scanner;
public class 二进制中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;
//比对每一位
for (int i = 0; i < 32; i++) {
if ((N & (1 << i)) == (1 << i)) {
count++;
}
}
System.out.println(count);
}
}
输出:
123
1111011
6
方法2:
package exer1;
import java.util.Scanner;
public class 二进制中1的个数2 {
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;
//比对每一位
for (int i = 0; i < 32; i++) {
if (((N >>> i)&1) == 1) {
count++;
}
}
System.out.println(count);
}
}
输出:
123
1111011
6
方法3:
(x - 1)& x :消去最低位的1
package exer1;
import java.util.Scanner;
public class 二进制中1的个数2 {
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;
while(N != 0){
N = (N-1)&N;
count++;
}
System.out.println(count);
}
}
输出:
123
1111011
6