0

このコードは、2 つの数値のうち小さい方を返す必要がありますが、大きい方の数値と同様の負の数値を返します。

Math.min(15, 21474836477) --> returns -2147483642

これは の範囲と関係があるのではないかと疑ったint'sので、値を に変更するlongと、プログラムは正常に動作しました。

それが返す一見乱数をよく理解していません-なぜそれは-2147483643私が入れた実際の数ではなく、-21474836477? オーバーフローした量による違いですか、それとも Math.min の他のパラメーターが何らかの影響を与えているのでしょうか?

4

3 に答える 3

2

示された結果 -2147483642 は、5-Integer.MAX_VALUE であり、7+Integer.MAX_VALUE です。Math.min 引数は実際にはその値であり、おそらくこれらの式のいずれかの評価の結果であると思われます。非常にネガティブなので、間違いなく 15 未満です。

このプログラム:

public class Test {
  public static void main(String[] args) {
    System.out.println(Math.min(15, Integer.MAX_VALUE));
    System.out.println(Math.min(15, 7+Integer.MAX_VALUE));
    System.out.println(Math.min(15, 5-Integer.MAX_VALUE));
  }
}

出力:

15
-2147483642
-2147483642
于 2013-09-18T04:07:47.980 に答える
0

以下に示すように、Math.min がオーバーロードされます。

static double min(double a, double b) 2 つの double 値のうち小さい方を返します。static float min(float a, float b) 2 つの float 値のうち小さい方を返します。static int min(int a, int b) 2 つの int 値のうち小さい方を返します。static long min(long a, long b) 2 つの long 値のうち小さい方を返します。

したがって、たとえば長い値でも使用できます

          long x = 98759765l;
      long y = 15428764l;

      // print the smaller number between x and y
      System.out.println("Math.min(" + x + "," + y + ")=" + Math.min(x, y));

ただし遠距離も射程外

于 2013-09-18T03:49:27.150 に答える
0

これ

Math.min(15, 21474836477) 

戻ってきたはずがない

-2147483642

整数リテラルが値21474836477の範囲外であるため、コード自体はコンパイルされませんでした。int

逃げた可能性がある

Math.min(15L, 21474836477L) 

その場合、オーバーロードされたMath.min(long, long)メソッドを実行します。

于 2013-09-18T03:44:46.533 に答える