求整數二進位制中1的個數-例2
阿新 • • 發佈:2021-10-23
題和解釋皆在註釋中(´▽`ʃ♡ƪ)
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"); } }
方法三解釋圖
執行結果圖
完~