-2

どして:

System.out.println((3 + 7 + 10) * (1000 - 8) / (992 - 17))

印刷3ではなく20

System.out.println (2.0 + 1.0/2 + 1.0/6 + 1.0/24 + 1.0/120)

印刷2.7166666666666663ではなく2.716666667

System.out.println (2147483647 + 1)

印刷-2147483648ではなく2147483648

4

5 に答える 5

4
System.out.println((3 + 7 + 10) * (1000 - 8) / 992 - 17)

これは、基本的な数学のために、20ではなく3を出力します。

  • 3 + 7 + 10 = 20
  • 1000-8 = 992
  • 20 * 992/992-17 = 20-17
  • 20-17 = 3

System.out.println (2.0 + 1.0/2 + 1.0/6 + 1.0/24 + 1.0/120)

これは浮動小数点の精度エラーです。


System.out.println (2147483647 + 1)

整数のオーバーフロー。

于 2012-08-27T18:46:32.390 に答える
2

System.out.println((3 + 7 + 10)*(1000-8)/ 992-17)20ではなく3を出力しますか?

操作の順序。最初に括弧を評価して(20)*(992)/ 992-17を取得します。次に、左から右に乗算と除算を行って20-17を取得します。最後に、減算して3を取得します。

System.out.println(2.0 + 1.0 / 2 + 1.0 / 6 + 1.0 / 24 + 1.0 / 120)は、2.716666667ではなく2.7166666666666663を出力しますか?

浮動小数点演算。Stack Overflowには、浮動小数点演算に関する多くの質問があります。Googleですばやく検索すると、おそらくこれまでにないほど多くの質問が表示されます。ただし、ウィキペディアの記事は良いスタートかもしれません。

System.out.println(2147483647 + 1)は、2147483648ではなく-2147483648を印刷しますか?

オーバーフロー。Javaでの整数の最大値は、2^31-1または2,147,483,647です。その値に1を追加すると、表示されている値にラップアラウンドします。これは、2秒の補数を使用した値のバイナリ表現と関係があります

于 2012-08-27T18:50:27.633 に答える
1
  1. (3 + 7 + 10) * (1000 - 8) / 992 - 1720 * 992 / 992 - 17、に要約され20 - 17、したがって3、ではありません20
  2. 浮動小数点演算は本質的に不正確です。
  3. 符号付きオーバーフローは、Javaで明確に定義された動作です。Javaです2147483647。、、つまり、。0x7fffffff0x7fffffff + 10x80000000-2147483648
于 2012-08-27T18:48:21.010 に答える
0

最初のprintステートメントで何を伝えようとしたのか理解できませんでした。出力に問題はありません。3番目のケースでは、intは32ビットであり、数値は範囲外です。正しい出力を得るには、大きな数の後にlを付けます(処理するのは同じくらい長いです)。

于 2012-08-27T18:50:39.220 に答える
0

#3に関して:

System.out.println(2147483647 + 1)は、longを使用すると2147483648を出力します。各変数タイプには最大容量があります。

于 2012-08-27T18:51:51.640 に答える