57

我查看了与 Big Integer 有关的这个 stackoverflow 问题,特别是我不明白这一行(斜体字):

在 BigInteger 类中,我没有任何限制,并且那里有一些有用的函数,但是将漂亮的代码转换为与 BigInteger 类一起使用是非常令人沮丧的,特别是当原始运算符在那里不起作用并且您必须使用此类中的函数时.

我不知道我错过了什么,但要代表没有限制的东西,你需要无限的记忆吗?这里的诀窍是什么?

4

4 回答 4

92

没有理论上的限制。该类BigInteger为要求保存的所有数据位分配所需的内存。

但是,存在一些实际限制,由可用内存决定。还有进一步的技术限制,尽管你不太可能受到影响:一些方法假设这些位可以通过int索引来寻址,所以当你超过Integer.MAX_VALUE位时,事情就会开始中断。

于 2012-08-23T09:18:23.713 回答
18

格雷厄姆对这个问题给出了很好的回答。我只想补充一点,你必须小心valueOf方法,因为它是使用long参数创建的,所以最大值是Long.MAX_VALUE.

于 2012-08-23T09:25:06.787 回答
6

是的,当我们需要具有任意精度的非常大的数字时使用它。请务必注意,“任意”精度或位数并不意味着“无限制”:它意味着计算中的位数或精度位数受内存和/或定义的精度限制我们指定的。

于 2012-08-23T09:31:13.520 回答
3

查看 BigInteger 类的源代码,您会看到(可以用 NetBean 完成)。一个数字将表示为一个 int 数组。例如,10113 将是 [1, 0, 1, 1, 3] (这并不是 BigInteger 类所做的,只是一个大数字模块如何工作的示例)。所以,从技术上讲,它唯一的限制是你的记忆。

于 2016-11-27T16:30:20.350 回答