1

2つの値の積がにint収まらないためint、それをに格納する場合、各オペランドの前(または少なくとも1つのオペランドの前)にlong明示的なキャストを指定する必要がありますか?longまたは、キャストがない場合でも、コンパイラはそれを正しく処理しますか?

これは明示的なコードになります。

public final int baseDistance = (GameCenter.BLOCKSIZE * 3/2);

long baseDistanceSquare = (long)baseDistance * (long)baseDistance;

または、以下のコードで十分ですか?

long baseDistanceSquare = baseDistance * baseDistance;
4

3 に答える 3

1

それをスクラッチします。私はそれを間違って読んだ。オーバーフローを防ぐためにキャストする必要があります。

于 2013-02-04T05:00:44.833 に答える
1

ちなみに、これは整数を使用した演算の結果をfloatに変換する問題と同等です。例えば:

    float f = 2/3;
    System.out.println(f);  // Print 0.0

    f = (float)(2/3);
    System.out.println(f);  // Print 0.0

    f = (float)2/3;
    System.out.println(f);  // Print 0.6666667
于 2013-02-04T05:28:46.203 に答える
1

正しいコードは次のとおりです。

long baseDistanceSquare = (long)baseDistance * (long)baseDistance;

キャスト値終了数学関数を実行します

他の例:

int X;
long Y, Z;
Z = X * Y; // Result is int value
Z = (long) X * Y   //Result is long value
Z = X * 1L //Result is long value
于 2016-12-12T15:22:57.557 に答える