Java中輸入一個十進制數,如何轉換爲二進制數

方法一:利用Java API直接轉換

十進制數如何轉換爲二進制數,這在Java API 中有一個方法,Integer.toBinaryString( ) 括號裏面寫上你要轉換的十進制數,這樣可以直接轉換。例如:

public static void main(String[] args) {

        十進制轉換爲二進制
        System.out.println(Integer.toBinaryString(10));

    }

方法二:通過求餘,求商,並計算值(例如:把二進制的1010 直接輸成十進制的1010)實現.

public static void main(String[] args) {
        // TODO Auto-generated method stub

        int a = 123;//定義一個變量並賦給他一個十進制的值
        int remainder;//定義一個變量用於存儲餘數
        int sum = 0;//定義一個變量用於存放和
        int k = 1;//定義一個變量控制位數

        while(a != 0){

            remainder = a % 2;//對目標數字求餘
            a /= 2;//對目標數字求商
            sum = sum + remainder * k;//求和
            k *= 10;//改變位數

        }
        System.out.println("10進制的123轉換爲2進制結果爲:" + sum );
    }

但是這種方法存在一個問題:因爲int類型是有取值範圍的,如果轉換的二進制數字超出了範圍(例如:10011100110110)這個數字明顯超出了int的取值範圍,這樣我們用int類型的sum進行存儲的時候他就會自動轉換爲一個其他的數字。並且這個方法沒有辦法求負數的二進制數。

方法三:在方法二的基礎上使用字符串對結果集進行存儲

public static void main(String[] args) {
        int n = -10;
        String result = "";
        boolean minus = false;

        //如果該數字爲負數,那麼進行該負數+1之後的絕對值的二進制碼的對應位取反,然後將它保存在result結果中
        if(n < 0){
            minus = true;
            n = Math.abs(n + 1);
        }

        while(true){
            int remainder = (!minus && n % 2 == 0) || (minus && n % 2 == 1) ? 0 : 1;

            //將餘數保存在結果中
            result = remainder + result;
            n /= 2;

            if(n == 0){
                break;
            }
        }

        //判斷是否爲負數,如果是負數,那麼前面所有位補1
        if(minus){
            n = result.length();
            for(int i = 1; i <= 32 - n; i++){
                result = 1 + result;
            }
        }

        System.out.println(result);

    }

用這種方法就能很好解決int類型的越界問題,能解決所有的十進制轉換二進制的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章