package _1_Bit_Operation;
import java.util.Scanner;
/**
* @Auther: YuanJun
* @Date: 2021/12/9 - 12 - 09 - 9:08
* @Description: _1_Bit_Operation
*/
//输入一个整数,输出改数的二进制表示中1的个数
//如 9 的二进制1001 输出2
public class test6 {
//这是一个main方法,是程序的入口:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个整数:");
int n = input.nextInt();
//输出n的二进制
System.out.println(Integer.toBinaryString(n));
//方法一:
//计数器
int count = 0;
//将1依次与二进制最低位到最高位做与运算,等于1<<i计数器加1
for (int i = 0; i < 32; i++) {
if((n & (1<<i)) == (1<<i)){
count++;
}
}
System.out.println(count);
//方法二:
int count2 = 0;
//将整数向右移,与1做与运算,等于1计数器加1
for (int i = 0; i < 32 ; i++){
if(((n>>i)&1) == 1){
count2++;
}
}
System.out.println(count2);
//方法三:
/**
* 用x&(x-1)
* 如:10100
* 10100 - 1 = 10011
* 10100
* & 10011
* --------
* 10000
* 10000-1 = 01111
* 10000
* & 01111
* -------
* 00000
* 当与出来的结果为0,终止运算,用了几次x&(x-1),x的二进制中有多少个1
*/
int count3 = 0;
while(true){
n = n&(n - 1);
count3++;
//当n等于0时候退出循环
if(n == 0){
break;
}
}
System.out.println(count3);
}
}
