我研究了这个与大整数相关的StackOverflow问题,特别是我不理解这行话(斜体字):
在BigInteger类中,我没有限制,并且有一些有用的函数,但将您的美丽代码转换为与BigInteger类一起工作真的很令人沮丧,特别是当原始操作符在那里无法使用时,您必须使用此类的函数。
我不知道自己错过了什么,但要表示没有限制的东西,您需要无限的内存吗?这里有什么诀窍?
我研究了这个与大整数相关的StackOverflow问题,特别是我不理解这行话(斜体字):
在BigInteger类中,我没有限制,并且有一些有用的函数,但将您的美丽代码转换为与BigInteger类一起工作真的很令人沮丧,特别是当原始操作符在那里无法使用时,您必须使用此类的函数。
我不知道自己错过了什么,但要表示没有限制的东西,您需要无限的内存吗?这里有什么诀窍?
没有理论上的限制。BigInteger
类会为其请求保存的所有数据位分配所需的内存。
然而,由可用内存所决定存在一些实际限制。还有进一步的技术限制,尽管你很不可能受到影响:一些方法假设这些位可以通过int
索引进行寻址,因此当超过Integer.MAX_VALUE
位时,事情将开始破裂。
Graham给出了很好的答案。我只想补充一点,就是在使用valueOf
方法时要小心,因为它是使用long
参数创建的,所以最大值是Long.MAX_VALUE
。
long
作为参数。只有一个getter(文档中警告可能会丢失信息)。 - martijnoLong.MAX_VALUE
的字面量,BigInteger.valueOf(long)
方法会导致编译错误,所以不需要太小心谨慎。此外,构造一个远大于 Long.MAX_VALUE
的 BigInteger 非常容易,例如 BigInteger.valueOf(10).pow(10000)
。 - leonbloy当我们需要使用任意精度的大数字时,就会使用它。需要注意的是,“任意”精度或数字位数并不意味着“无限制”,而是指数字中的位数或计算中的精度位数受内存和/或我们指定的精度限制所限。