Java中實現十進制數轉換為二進制的三種思路


Java中實現十進制數轉換為二進制

第一種:除基倒取余法

這是最符合我們平時的數學邏輯思維的,即輸入一個十進制數n,每次用n除以2,把余數記下來,再用商去除以2...依次循環,直到商為0結束,把余數倒着依次排列,就構成了轉換后的二進制數。

那么,在實際實現中,可以用int的一個數來存儲最后的二進制,每次求余后把余數存儲在int型數的低位,依次遞增。

 1   public void binaryToDecimal(int n){
 2       int t = 0;  //用來記錄位數
 3       int bin = 0; //用來記錄最后的二進制數
 4       int r = 0;  //用來存儲余數
 5       while(n != 0){
 6           r = n % 2;
 7           n = n / 2;
 8           bin += r * Math().pow(10,t);
 9           t++; 
10      }
11          System.out.println(bin);
12  }

 

但是int型最大只能表示2^31-1 的正數,所以,存儲的二進制數位數有限;我們都知道,int在java中的存儲范圍是32位,則可以使用字符串的拼接(+)來實現,代碼如下:

1  public void binaryToDecimal(int n){
2      String str = "";
3      while(n!=0){
4          str = n%2+str;
5          n = n/2;
6      }
7          System.out.println(str);
8 }

 

第二種:利用“移位”操作實現

我們可以直接利用移位操作對一個十進制數進行移位操作,即:將最高位的數移至最低位(移31位),除過最低位其余位置清零,使用& 操作,可以使用和1相與(&),由於1在內存中除過最低位是1,其余31位都是零,然后把這個數按十進制輸出;再移次高位,做相同的操作,直到最后一位 ,代碼如下。可以說,這是我到目前為止見到的最簡單的實現方式了。

1 public void binaryToDecimal(int n){
2      for(int i = 31;i >= 0; i--)
3          System.out.print(n >>> i & 1);
4 }

 

說明:由於計算機中存儲的都是數的補碼,正數的原碼、反碼、補碼都是相同的;而負數的原碼、反碼、補碼是不一樣的,補碼=原碼取反+1(符號位不變)。所以,負數是按照它的補碼輸出的。

>>>為邏輯移位符,向右移n位,高位補0
>> 算數移位符,也是向右移n位,不同的是:正數高位補0,負數高位補1
<< 移位符,向左移n位,低位補0

第三種:調用API函數

這是處理問題更符合面向對象的一種方式:

1 public void function1(int n){
2      String result = Integer.toBinaryString(n);
3      //int r = Integer.parseInt(result);
4      //System.out.println(r);
5      System.out.println(result);
6  }

 

小小的建議:  此代碼中,可以直接用字符串輸出;也可以利用Interger.parseInt()轉化為int,但不建議這種方式,當為負數時,int型的表示不了32的一個整數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM