//思路 设置一个变量为1 然后每一位去与1异或 然后声明一个计数变量计数
// ①被比较的二进制通过>>>每次无符号右移一个位置
// ②把变量 1 往前移动
// ③ 想法:二进制里有几个1 我就消去1 消去几次就有几个
// 方法:进行&运算 原理 :二进制a - 1 和 二进制a 进行一次&运算 可以消去最右边的1
//所需的方法
//转换进制
System.out.println(Integer.toBinaryString(8));
System.out.println(Integer.toString(10, 7));
//或者进制转换用Integer.toString(N,2)
//返回传入参数的补码中1的个数
System.out.println(Integer.bitCount(8));
public class Demo2 {
private static int methods1(int N) {
//方法一 ;利用与运算
// TODO Auto-generated method stub
int count = 0;
while (N != 0) {
N = (N - 1)&N;
count++;
}
return count;
}
private static int methods2(int N) {
//方法二 ;利用一个1 N每次右移
// TODO Auto-generated method stub
int count = 0;
for (int i = 0; i < 33; i++) {
if (((N>>>i)&1) == 1) {
count++;
}
}
return count;
}
private static int methods3(int N) {
//方法三 ;N不动 每次1左移
// TODO Auto-generated method stub
int count = 0;
for (int i = 0; i < 33; i++) {
if ((N&(1<<i)) == (1<<i)) {
count++;
}
}
return count;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int counts1 = methods1(N);
int counts2 = methods2(N);
int counts3 = methods3(N);
System.out.println(counts1);
System.out.println(counts2);
System.out.println(counts3);
sc.close();
}
}