输入一个整数,输出改数的二进制表示中1的个数 ———如 9 的二进制1001 输出2
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); } }