1.获取一个数n的二进制的第k位
解法:n >> k & 1
该数右移k位再与1
2.返回x的最后一位1(最靠右的1)
解法:x & (-x)
-x相当于~x+1
应用:检测x有多少个1
思路:每次减去x的最后一位1,知道x=0为止,即减了几次就是有几个1
import java.util.Scanner;
public class lowBit {
static int N = 100000;
public static int low_bit(int num){
return num & (-num);
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] a = new int[N];
for(int i = 0;i < n;i++){
a[i] = in.nextInt();
}
for(int i = 0;i < n;i++){
int num = 0;
while(a[i] != 0){
a[i] -= lowBit.low_bit(a[i]);
num++;
}
System.out.print(num);
}
}
}