2015-10-17 42 views
0

我想將BigInteger數字轉換爲二進制數。我使用一個while循環來減少BigInteger,直到它等於1,並將餘數作爲循環運行。BigInteger.intValue()> 1給出不正確的布爾值

循環的條件是:(decimalNum.intValue()> 1)。

但是程序只經過一次循環,然後認爲BigInteger小於/等於1,而實際上它大約是55193474935748. 爲什麼會發生這種情況?

(「inBinary」是一個ArrayList從環舉行的餘)

這裏是while循環:

while (decimalNum.intValue()>1){ 
     inBinary.add(0, decimalNum.mod(new BigInteger("2")).intValue()); //Get remainder (0 or 1) 
     decimalNum = decimalNum.divide(new BigInteger("2")); //Reduce decimalNum 
} 
+3

因爲你不能代表所有'BigInteger'值'int',如'int'只上升到2B。我猜'intValue'溢出 –

回答

1

爲了讓您的BigInteger的二進制字符串值,你可以只做

bigInteger.toString(2); 

編輯:作爲mentionned由@VinceEmigh的意見,將BigIntegerint可能會導致溢出。

+0

謝謝!不知道BigInteger有一個方法。 – SorenLantz

8

55,193,474,935,748不適合int:最大的int值是2 -1,即2,147,483,647,這是小得多的。所以你得到一個整數溢出。

這在the javadoc說明,順便說一句:

將此BigInteger轉換爲一個int。此轉換類似於Java™語言規範第5.1.3節中定義的從long到int的縮減原始轉換:如果此BigInteger太大而無法放入int,則只返回低位32位。請注意,此轉換可能會丟失有關BigInteger值整體大小的信息,並會返回相反符號的結果。

如果你想爲BigInteger比較1,然後用

decimalNum.compareTo(BigInteger.ONE) > 0 
相關問題