Как BigInteger сохраняет свои данные?
Я довольно долго искал, и я почти ничего не нашел о том, как BigInteger
действительно содержит свои номера. Являются ли они множеством символов? Что-то другое? И как данные преобразуются в/из BigInteger
?
Из того, что я нашел, я предполагаю, что все произвольные классы точности, такие как BigInteger
и BigDecimal
, содержат данные в виде массива символов. Так ли это на самом деле работает? Или это просто люди догадываются?
Я спрашиваю, потому что я работал над собственной реализацией чего-то вроде BigInteger
, но я не могу понять, как удерживать числа больше, чем Long.MAX_VALUE
(я не помню фактическое число).
Спасибо заранее.
Ответы
Ответ 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
Существует множество способов представления больших целых чисел. Строки символов просты,
и любой, кто когда-либо делал длинное разделение карандашом и бумагой, мог написать
арифметические подпрограммы.