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位,則可以使用字串的拼接(+)來實現,代碼如下: 按 Ctrl+C 複製代碼 public void binaryToDecimal(int n){ String str = ""; while(n!=0){ str = n%2+str; n = n/2; } System.out.println(str); } 按 Ctrl+C 複製代碼
第二種:利用“移位”操作實現
我們可以直接利用移位操作對一個十進位數進行移位操作,即:將最高位的數移至最低位(移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的一個整數