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 arb开发者_运维问答itrary 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;
The most common way of representing numbers is by using the positional notation system. Numbers are written using digits to represent multiples of powers of the specified base. The base that we are most familiar with and use everyday, is base 10. When we write the number 12345 in base 10, it actually means: 12345 = 1*10^4 + 2*10^3 + 3*10^2 + 4*10^1 + 5*10^0
Continued here...
There are many ways to represent big integers. Strings of characters is simple, and anyone who has ever done long division with pencil and paper can write the arithmetic routines.
精彩评论