Подтвердить что ты не робот

Как BigInteger сохраняет свои данные?

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

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

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

Спасибо заранее.

4b9b3361

Ответ 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. Когда мы пишем номер 12345 в базе 10, это на самом деле означает: 12345 = 1 * 10 ^ 4 + 2 * 10 ^ 3 + 3 * 10 ^ 2 + 4 * 10 ^ 1 + 5 * 10 ^ 0

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

Ответ 3

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