2012-12-17 40 views
-2
void convert(int bTen) { 
    System.out.println("Base 10 = " + bTen); 
    int bTwo = 0; 
    int leftOver = bTen; 
    while (leftOver > 0) { 
     int i = 0; 
     int remains = 0; 
     while (remains >= 0) { 
      remains = leftOver - (int)Math.pow(2, i); 
      i++; 
     } 
     bTwo += Math.pow(10, i - 2); 
     leftOver = leftOver - (int)Math.pow(2, i - 2); 
    } 
    System.out.println("Base 2 = " + bTwo); 
} 

我想知道爲什麼上面的代碼可以將base-10中的數字轉換爲base-2。我知道如何編寫一個程序來將base-2轉換爲base-10,但我似乎無法理解如何做相反的事情。鹼基間轉換算法是如何工作的?

+1

並沒有真正轉化爲基地2.創建一個整數,看起來像原來的基地二期表示時爲基地10號打印出來。也就是說,它基本上是這樣做的:http://mathbits.com/MathBits/CompSci/Introduction/frombase10.htm –

+0

哦,好吧。這實際上是我想要做的。然後@請解釋,否則我會找到你並向你報告垃圾郵件。 – Zwischenzug

+0

雖然我不是倒票選者,但我相信所有人都有權利和自由地投下正確的選票嗎?考慮到進行基數2 /基數10轉換的非理性方式,人們放棄投票並非不合理。 –

回答

2

首先,我認爲這種轉換是不合理的,不應該這樣做。

Base-10或Base-2只是一個相同數字的文本表示。然而,你的邏輯正在改變一個數字(A)到另一個數字(B),如果你正在讀取B的基數爲10,它將看起來與A的基數-2相同。

無論如何,你引用的代碼的邏輯是這樣的:

loop until input is not zero (i.e. loop until all binary digits processed) 
    find the position (i) of the most significant bit that is 1 
    set position of i of result being 1 
    subtract 2^i from input 
end loop