1. 程式人生 > 其它 >用Java實現二進位制中1的個數與輸出二進位制奇偶序列

用Java實現二進位制中1的個數與輸出二進位制奇偶序列

技術標籤:java程式語言資料結構經驗分享

用Java實現二進位制中1的個數與輸出二進位制奇偶序列

目錄

1. 二進位制中1的個數

2 .輸出二進位制序列


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();
    }

    }

執行結果如下: