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的一個整數