Sor*_*ntz 0 java math conditional biginteger while-loop
我正在尝试将BigInteger数转换为二进制数.我使用while循环来减少BigInteger,直到它等于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
}
Run Code Online (Sandbox Code Playgroud)
55,193,474,935,748不适合int:最大的int值是2 31 - 1,即2,147,483,647,它小得多.所以你得到一个整数溢出.
这在javadoc,BTW中有解释:
将此BigInteger转换为int.这种转换类似于Java*语言规范5.1.3节中定义的从long到int的缩小原语转换:如果这个BigInteger太大而不适合int,则只返回低位32位.请注意,此转换可能会丢失有关BigInteger值的总体大小的信息,并返回具有相反符号的结果.
如果要将BigInteger与1进行比较,请使用
decimalNum.compareTo(BigInteger.ONE) > 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |