2

通常の数学用語では、-1756046391*-1291488517は2267913749295792147に等しくなります。

Javaでまったく同じ方程式を入力すると、答えが得られます:-1756046391 * -1291488517=19。

誰かがこれに光を当てることができますか?

4

4 に答える 4

6

オーバーフロー。

Integer.MAX_VALUE を確認してください。Java の整数は、32 ビットの 2 の補数値です。MAX_VALUE を超えることはできません。

于 2012-05-09T11:32:38.217 に答える
5

非常に大きな数を処理する場合は、使用したデータ型がその数を格納するのに十分な大きさであることを確認する必要があります。Javaには、次のプリミティブな数値タイプがあります。

type:                      min:                      max:
byte                       -128                       127
short                    -32768                     32767
int              -2,147,483,648             2,147,483,647
long -9,223,372,036,854,775,808 9,223,372,036,854,775,807

ご覧のとおり、あなたの番号はほぼに収まりますlong。しかし、あなたはそれを乗り越えなければならないので、おそらくBigInt代わりにクラスを使用する必要があります:

http://docs.oracle.com/javase/6/docs/api/java/math/BigInteger.html

于 2012-05-09T11:38:06.033 に答える
1

他の人が言ったように long を使用するか、それがアプリケーションにとって十分でない場合は、 の使用を検討してくださいBigInteger

于 2012-05-09T11:33:54.810 に答える
0

これを再現するために使用した正確なコードを投稿してください。

ほとんどの場合、int を使用しています。2267913749295792147 は大きすぎて int に収まらないため、long を使用します。

于 2012-05-09T11:32:50.310 に答える