web-dev-qa-db-ja.com

BigIntegerはどのようにデータを保存しますか?

私はかなり長い間探し回っていましたが、BigIntegerが実際にその数をどのように保持しているかについてはほとんど何も見つかりませんでした。それらは文字の配列ですか?他に何かありますか?そして、データはどのようにBigIntegerとの間で変換されますか?

私が見つけたものから、BigIntegerBigDecimalなどの任意精度クラスはすべて、データを文字配列として保持していると思います。これは実際にどのように機能するのですか?それとも人々の推測ですか?

BigIntegerのようなものの独自の実装に取り​​組んでいるので質問していますが、Long.MAX_VALUEより大きい数を保持する方法がわかりません(実際の数を覚えていません) )。

前もって感謝します。

32
Jon Egeland

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;
23
corsiKa

数値を表す最も一般的な方法は、位置表記システムを使用することです。数字は、指定された底の累乗の倍数を表すために数字を使用して書き込まれます。私たちが最もよく知っていて日常的に使用している基数は基数10です。基数10に12345という数値を書くと、実際には次のようになります。12345= 1 * 10 ^ 4 + 2 * 10 ^ 3 + 3 * 10 ^ 2 + 4 * 10 ^ 1 + 5 * 10 ^ 0

ここに続く...

0
Petr Abdulin