Я довольно долго искал и почти ничего не нашел о том, как BigInteger
на самом деле хранит свои числа. Это массив символов? Что-то другое? И как данные конвертируются в / из BigInteger
?
Из того, что я обнаружил, я предполагаю, что все классы произвольной точности, такие как BigInteger
и BigDecimal
, хранят данные в виде массива символов. Так ли это на самом деле работает? Или это просто предположение людей?
Я спрашиваю, потому что я работал над своей собственной реализацией чего-то вроде BigInteger
, но не могу понять, как хранить числа, превышающие Long.MAX_VALUE
(я не помню фактическое число) .
Заранее спасибо.
3 ответа
С 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;
valueOf(int[])
принимает ввод в виде дополнения до двух.)
Наиболее распространенный способ представления чисел - использование позиционной системы обозначений. Числа записываются с использованием цифр, чтобы представить кратные степени указанной базы. База, с которой мы наиболее знакомы и используем ежедневно, - это база 10. Когда мы записываем число 12345 в базе 10, это фактически означает: 12345 = 1 * 10 ^ 4 + 2 * 10 ^ 3 + 3 * 10 ^ 2 + 4 * 10 ^ 1 + 5 * 10 ^ 0
java.math.BigInteger
.
Есть много способов представить большие целые числа. Строки символов просты, и любой, кто когда-либо делал длинное деление карандашом и бумагой, может написать арифметические процедуры.
BigInteger
это делает, а не как может это сделать.
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
BigInteger
. Вы можете просмотреть полный исходный код Sun JDK, если будете достаточно стараться - Oracle сделал его труднее, чем раньше, но это все еще возможно; начните здесь. Вы можете просмотреть версию OpenJDK здесь (также используетсяint[]
).