Как BigInteger хранит свои данные? - PullRequest
28 голосов
/ 04 мая 2011

Я довольно долго искал и почти ничего не нашел о том, как BigInteger на самом деле хранит свои числа. Это набор символов? Что-то другое? И как данные преобразуются в / из BigInteger?

Из того, что я обнаружил, я предполагаю, что все классы произвольной точности, такие как BigInteger и BigDecimal, содержат данные в виде массива символов. Так ли это на самом деле работает? Или это просто предположение людей?

Я спрашиваю, потому что я работал над собственной реализацией чего-то вроде BigInteger, но я не могу понять, как хранить числа больше Long.MAX_VALUE (я не помню фактическое число).

Заранее спасибо.

Ответы [ 3 ]

22 голосов
/ 04 мая 2011

С 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;
0 голосов
/ 04 мая 2011

Есть много способов представить большие целые числа. Строки символов просты, и любой, кто когда-либо делал длинное деление карандашом и бумагой, может написать арифметические процедуры.

0 голосов
/ 04 мая 2011

Наиболее распространенный способ представления чисел - использование системы позиционных обозначений.Числа записываются с использованием цифр для представления кратных степеней указанной базы.База, с которой мы больше всего знакомы и которую мы используем каждый день, - это база 10. Когда мы пишем число 12345 в базе 10, это на самом деле означает: 12345 = 1 * 10 ^ 4 + 2 * 10 ^ 3 + 3 * 10 ^ 2 +4 * 10 ^ 1 + 5 * 10 ^ 0

Продолжение здесь ...

...