私はかなり長い間探し回っていましたが、BigInteger
が実際にその数をどのように保持しているかについてはほとんど何も見つかりませんでした。それらは文字の配列ですか?他に何かありますか?そして、データはどのようにBigInteger
との間で変換されますか?
私が見つけたものから、BigInteger
やBigDecimal
などの任意精度クラスはすべて、データを文字配列として保持していると思います。これは実際にどのように機能するのですか?それとも人々の推測ですか?
BigInteger
のようなものの独自の実装に取り組んでいるので質問していますが、Long.MAX_VALUE
より大きい数を保持する方法がわかりません(実際の数を覚えていません) )。
前もって感謝します。
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;
数値を表す最も一般的な方法は、位置表記システムを使用することです。数字は、指定された底の累乗の倍数を表すために数字を使用して書き込まれます。私たちが最もよく知っていて日常的に使用している基数は基数10です。基数10に12345という数値を書くと、実際には次のようになります。12345= 1 * 10 ^ 4 + 2 * 10 ^ 3 + 3 * 10 ^ 2 + 4 * 10 ^ 1 + 5 * 10 ^ 0