2014-09-29 99 views
0

我正在寫一個函數來將int數轉換爲它們的int數字二進制數,按照下面的解釋: 假設我們希望將十進制數57轉換爲二進制數。我們首先從右至左編寫位置 的值,直到我們到達位置值大於 的列小於十進制數。我們不需要那個專欄,所以我們放棄它。因此,我們首先 寫:Java中的十進制到二進制函數

位置值:64 32 16 8 4 2 1

然後我們丟棄位置值64列,留下:

位置值:32 16 8 4 2 1

接下來我們從最左邊的一列到右邊。我們將32分成57和 觀察到57中有32個餘數爲25,所以我們在32列中寫1。 我們將16分爲25,並觀察到25中有16個餘數爲9,並在16列中寫入 1。我們將8分成9,並觀察9中有8個,其餘爲1。當接下來的兩列各自的位置 的值被分成1時,每個列產生0的商,所以我們在4和2列中寫入0。最後,1到1是1,所以我們在1列中寫1。這產生了:

位置值:32 16 8 4 2 1 符號值:1 1 1 0 0 1

我寫試圖按照說明的腳步的功能。當dec = 10且c2 = 4時,不應該繼續while循環,因爲10 < = 4是錯誤的,但條件爲真。有人可以解釋發生了什麼嗎?

public static int decimaltobinary(int dec){}{ 
    int bin = 0,it; 
    int c1,c2; 
    while(dec>0){ 
     it = 1; 
     do{ 
      c2 = (int)Math.pow(2, it +1); 
      c1 = (int)Math.pow(2, it); 
     }while(dec <= c2 && dec < c1); 
     bin += Math.pow(10, it - 1); 
     dec = dec % c1; 
    } 
    return bin; 
} 
+1

「它」永遠不會增加。 – Ypnypn 2014-09-29 21:27:41

回答

2

你可以做到這一點很容易,如果你不需要自己的算法:如果你想使自己的算法

public int toBinary(int decimal) { 
    String binaryString = Integer.toBinaryString(decimal); 
    return Integer.parseInt(binaryString); 
} 

,撲咬會更容易些。 int看起來像一個整數的二進制表示的可憐的容器,因爲你只能保存9位。

public int toBinaryBitBashing(int decimal) { 
    int bitCount = 6; 
    int bit = 0; 
    int binary = 0; 
    int power = 1; 
    for(int i=0; i<bitCount; ++i) { 
     bit = (decimal >> i) & 1; 
     binary += bit * power; 
     power *= 10; 
    } 

    return binary; 
}