gpt4 book ai didi

java - BigInteger.intValue()>1 给出错误的 boolean 值

转载 作者:行者123 更新时间:2023-12-01 06:50:22 25 4
gpt4 key购买 nike

我正在尝试将 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
}

最佳答案

55,193,474,935,748 不适合 int:最大的 int 值是 231 - 1,即 2,147,483,647,它要小得多。所以你会得到整数溢出。

这在 the javadoc 中有解释。 ,顺便说一句:

Converts this BigInteger to an int. This conversion is analogous to a narrowing primitive conversion from long to int as defined in section 5.1.3 of The Java™ Language Specification: if this BigInteger is too big to fit in an int, only the low-order 32 bits are returned. Note that this conversion can lose information about the overall magnitude of the BigInteger value as well as return a result with the opposite sign.

如果要将 BigInteger 与 1 进行比较,请使用

decimalNum.compareTo(BigInteger.ONE) > 0

关于java - BigInteger.intValue()>1 给出错误的 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33189127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com