Jon Jon - 9 days ago 5
Java Question

How does BigInteger store its data?

I've been searching around for quite a while, and I've found almost nothing on how

BigInteger
actually holds its numbers. Are they an array of chars? Something else? And how is data converted to/from
BigInteger
?

From what I've found, I am assuming that all of arbitrary precision classes, like
BigInteger
and
BigDecimal
, hold data as a character array. Is this how it actually works? Or is it just people's guess?

I'm asking because I have been working on my own implementation of something like
BigInteger
, but I can't figure out how to hold numbers larger than
Long.MAX_VALUE
(I don't remember the actual number).

Thanks in advance.

Answer

With an int[]

From the source:

/**
 * 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;
Comments