web-dev-qa-db-ja.com

BigIntegerに制限がないとはどういう意味ですか?

私はこれを調べました Big Integerに関連するstackoverflowの質問 そして、特にこの行(イタリック体の単語)を理解していません:

BigIntegerクラスでは、制限はありません、そこにいくつかの便利な機能がありますが、BigIntegerクラスで動作するように美しいコードを変換するのはかなり気の毒です、特にプリミティブ演算子がそこで機能せず、このクラスの関数を使用する必要がある場合。

私は何が欠けているのか分かりませんが、制限のないものを表すには無限のメモリが必要ですか?ここでのトリックは何ですか?

47
Geek

理論的制限はありません。 BigIntegerクラスは、保持するよう要求されたデータのすべてのビットに必要なだけのメモリを割り当てます。

ただし、使用可能なメモリによって決まる実際的な制限がいくつかあります。さらに、技術的な制限もありますが、影響を受ける可能性はほとんどありません。一部の方法では、ビットがintインデックスでアドレス指定可能であると想定しているため、Integer.MAX_VALUEビット。

81
Graham Borland

グラハムはこの質問に素晴らしい答えを与えました。 valueOfパラメータを使用して作成されているため、longメソッドに注意する必要があることだけを追加したいので、最大値はLong.MAX_VALUE

17
Adam Sznajder

はい、任意の精度で非常に大きな数が必要な場合に使用されます。 「任意の」精度または桁数は「無制限」を意味しないことに注意することが重要です。つまり、計算の桁数または桁数の桁数は、メモリおよび/または定義された精度の制限によって制限されます。指定すること。

4
Eduard

BigIntegerクラスのソースコードを見るとわかります(NetBeanで実行できます)。数値はint配列として表されます。たとえば、10113は[1、0、1、1、3]になります(これはBigIntegerクラスが正確に行うことではなく、単なる大きな数のモジュールの動作例です)。したがって、技術的には、唯一の制限はあなたの記憶になります。

3