0

整数 int i = 4945932; を宣言しました。そして、その二乗は負の乱数であることがわかります。これはどのように可能ですか?私は何を間違っていますか?助けてください。よろしくお願いします。

4

4 に答える 4

7

整数のオーバーフロー。Javaintは2,147,483,647より大きくすることはできません。より多くの数を格納しようとすると、オーバーフローします。

代わりにを使用するlongと、保存しようとしている値を含め、はるかに大きな値を保存できます。さらに大きな値が必要な場合は、java.math.BigInteger任意精度の整数を格納できます。唯一の制限は、コンピュータのメモリです。

于 2012-07-03T12:31:21.193 に答える
2

int の制限が原因で発生します。整数オーバーフロー。

int は、符号付き (2 の補数) の 4 バイトを格納できます。-2,147,483,648 ~ 2,147,483,647。

24462243348624と書くint i= square(4945932)とintの制限を超えてしまうので異常な動作をします。

于 2012-07-03T12:30:26.627 に答える
2

使用できます

long l = 4945932L;
System.out.println(l * l);
BigInteger bi = BigInteger.valueOf(4945932L);
System.out.println(bi.multiply(bi));

版画

24462243348624
24462243348624
于 2012-07-03T12:43:30.267 に答える
1

intのサイズを超えています。4945932を正方形にしたい場合は、longに変更する必要があります。

于 2012-07-03T12:32:54.313 に答える