BigInteger如何存储其数据?

2022-09-01 06:15:05

我已经四处寻找了很长一段时间,我几乎没有发现任何关于它的数字是如何实际保持的。它们是一系列字符吗?别的?数据如何转换为/从?BigIntegerBigInteger

根据我的发现,我假设所有任意精度类(如 and )将数据保存为字符数组。这是它实际的工作方式吗?还是这只是人们的猜测?BigIntegerBigDecimal

我之所以问这个问题,是因为我一直在研究我自己实现类似的东西,但我不知道如何保持大于的数字(我不记得实际数字)。BigIntegerLong.MAX_VALUE

提前致谢。


答案 1

使用int[]

从源头:

/**
 * The magnitude of this BigInteger, in <i>big-endian</i> order: the
 * zeroth element of this array is the most-significant int of the
 * magnitude.  The magnitude must be "minimal" in that the most-significant
 * int ({@code mag[0]}) must be non-zero.  This is necessary to
 * ensure that there is exactly one representation for each BigInteger
 * value.  Note that this implies that the BigInteger zero has a
 * zero-length mag array.
 */
final int[] mag;

答案 2

表示数字的最常见方法是使用位置表示法系统。数字是使用数字书写的,以表示指定基数的幂的倍数。我们最熟悉和每天使用的基数是10基数。当我们以10为基数写数字12345时,它实际上意味着:12345 = 1 * 10 ^ 4 + 2 * 10 ^ 3 + 3 * 10 ^ 2 + 4 * 10 ^ 1 + 5 * 10 ^ 0

继续在这里...


推荐