用Java實現二進位制中1的個數與輸出二進位制奇偶序列
用Java實現二進位制中1的個數與輸出二進位制奇偶序列
目錄
1. 二進位制中1的個數
題目一:求一個整數,在記憶體當中儲存時,二進位制1的個數。
問題分析:a.如何將輸入的十進位制轉變為二進位制?
答:使用按位與&操作時將會將十進位制自動轉換為二進位制。
b. 如何統計1的個數?
答:將數字與1相與, 如果相與結果為1,表示該整數的最後一位為1。
逐次右移>>1位,每次向右移1位可將該整數最後一位去除,從而判斷有幾個1。
所以我們可以得到如下程式碼:
import java.util.Scanner; public class TestDome { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); int num =0; while(a!=0) { if ((a &1) == 1){ num++; } a = a >>1; } System.out.println("二進位制中1的個數為" +num); } }
執行結果如下:
2. 輸出二進位制序列
題目二:獲取一個數二進位制序列中所有的偶數位和奇數位,分別輸出二進位制序列。
問題分析:a.如何輸出二進位制序列?
答:使用按位與&操作時將會將十進位制自動轉換為二進位制。
b.此題與題目一的區別是什麼?
答:此題要想得到的是奇數位序列和偶數列序列,並非正常的二進位制序列。
所以,每次迴圈時變數應一次性改變為2。
c.如何有序提取各位上的1或0?
答:將數字與1相與, 如果相與結果為1,表示該整數的最後一位為1。反之則為0。
逐次右移>>2位,每次向右移2位可將該整數最後一位取出,從而有序提取出各位上的1或0。
注意事項:
a.因為二進位制序列輸出需要有序輸出,即高位先輸出,不能顛倒順序,所以變數迴圈時必須從相應的最高位開始,每次減2。
b.因為需要奇數位序列與偶數列序列,所以我們應該分成兩種情況:
One:奇數位序列——因為二進位制序列的最後一位就屬於奇數位,所以不用進行右移,直接與1相與便可得到結果(也就意思相當於右移了0位),所以在設定迴圈變數的時候最大值(最高位)為31,最小值(最低位)為0。
Two:偶數位序列——因為奇數位在設定迴圈變數的時候最大值(最高位)為31,最小值(最低位)為0。所以,偶數位最大值應為32,最小值為1。
所以我們可以得到如下程式碼:
import java.util.Scanner;
public class TestDome {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
System.out.print("偶數位序列:" );
for(int i = 31;i >=1 ;i -= 2){
System.out.print( a>>i & 1);
}
System.out.println(" ");
System.out.print("奇數位序列:");
for(int i = 30;i >=0;i -= 2){
System.out.print( a>>i & 1);
}
scanner.close();
}
}
執行結果如下: