1. 程式人生 > 其它 >求整數二進位制中1的個數-例2

求整數二進位制中1的個數-例2

題和解釋皆在註釋中(´▽`ʃ♡ƪ)

package 二進位制中1的個數;

import java.util.Scanner;

/**
 * @author 鄧雪松 (づ ̄ 3 ̄)づ)9.37
 * @create 2021-10-22-21-26
 * 題目:
 *      請實現一個函式,輸入一個整數,輸出該數二進位制表示中1的個數
 * 例:9的二進位制表示為1001,有2位是1
 */
public class Demo {
    public static void main(String[] args) {
        System.out.print("請輸入一個整數:");
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        //輸出輸入的數的二進位制形式
        System.out.println(Integer.toString(N,2));
        int count=0;//計數二進位制中1的個數
        //之所以是32次迴圈是因為整形int為4*8
        for (int i = 0; i < 32; i++) {
            //讓N每次與1左移的值相與-->如果與1左移對應位後的值相等-->代表這位(i+1位)為1
            if((N&(1<<i))==(1<<i)){
                count++;
            }
        }
        System.out.println("第一種方法->輸入數二進位制形式含有:"+count+"位為1");

        //第二種方法開始
        count=0;
        for (int i = 0; i < 32; i++) {
            //思路是讓N無符號右移(0-31)位,然後與1與,如果是1--》那麼代表這數的第i+1位為1
            if(((N>>>i)&1)==1)
                count++;
        }
        System.out.println("第二種方法->輸入數二進位制形式含有:"+count+"位為1");

        //第三種方法比較巧妙 但是也不好想畫圖吧->公式為輸入數x與(x-1)的值->會取出最低為的1
        count=0;
        while(N!=0){
            N=((N-1)&N);//每次更新N的值
            count++;
        }
        System.out.println("第三種方法->輸入數二進位制形式含有:"+count+"位為1");

    }
}

方法三解釋圖

執行結果圖

完~