.................

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

 

 

posted on 2021-12-09 09:57  么么^  阅读(78)  评论(0编辑  收藏  举报

Live2D