求一个数n,其2进制数中1的个数(java)
来源 b站:一只会code的小金鱼:【2.6直播回放 | 为什么会有反码补码 | lowbit运算】https://www.bilibili.com/video/BV16G4y1U7Ry?vd_source=7341c7fca3b496e9108bb1fd49c634ef
循环取余法
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count = 0;
while (n != 0){
if (n % 2 == 1){
count ++;
}
n /= 2;
}
long endTime = System.currentTimeMillis();
System.out.println(count);
}
}
与(&)运算
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count = 0;
while (n != 0){
//&运算
if ((n & 1) == 1){
count ++;
}
//按位向右移1位
//例如: 0010 - > 0001(实际int是32位)
n = n >> 1;
}
System.out.println(count);
}
}
lowbit运算
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count = 0;
while (n != 0){
//例如:0110 - 0010 = 0100
n -= lowbit(n);
count ++;
}
System.out.println(count);
}
public static int lowbit(int x){
// -x = ~x + 1; 返回最低位的 1 及其后面的所有的 0 ” 的二进制构成的数值。
//& -x : 补码运算
return x & -x;
}
}