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.
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;