HOWTO · Java

Java での整数除算

この記事では、Java で整数除算がどのように行われるかを紹介します。

この記事では、2つの整数を除算したときに内部的に何が起こるかについて詳細に説明しています。

以下の Java コードには、4つの Java ステートメントがあります。各行は、互いに分割された数値に基づいて異なる出力を出力します。

package integer_division;

public class IntegerDivision {
  public static void main(String[] args) {
    System.out.println(10 / 9);
    System.out.println(-10 / 9);
    System.out.println(10 / -9);
    System.out.println(10 / 19);
    System.out.println((float) 10 / 9);
    System.out.println((double) 10 / 9);
  }
}
  1. ケース 1 の場合、大きい整数は小さい整数で除算されます。結果の出力は整数 1 です。数学的には、10 を 9 で割ると、繰り返しの数は 1.1111... になります。しかし、Java 言語では、整数が別の整数を除算すると、余りが破棄され、商が保持されます。したがって、結果の出力は整数になります。
  2. ケース 2 では、負の整数を正の整数に除算すると、整数は -1 になります。上で述べたように、整数は剰余を捨て、商を保持します。したがって、結果の値は負の整数になります。
  3. ケース 3 では、分子が正の整数で、分母が負の整数である逆のケースがあります。結果の出力は -1 です。繰り返しますが、分子または分母の負の符号はそれほど重要ではありません。余りを残さずに、2つの数値を単純に除算します。したがって、出力は再び整数の負の値になります。
  4. ケース 4 の場合、分母は分子よりも大きいため、数値は 1 よりも小さくなります。上記のように、数値はゼロの後で切り捨てられ、値 0 が出力として出力されます。
  5. ケース 5 では、出力を float 値に手動で型キャストしています。

最初に型キャストについて理解しましょう。

型キャストは、あるデータ型を別のデータ型に変換するプロセスであり、これは手動または自動で行うことができます。

  1. 広義の型キャスト暗黙の変換と呼ばれることがよくあります。このタイプのキャストでは、小さいデータ型が高いデータ型に変換されます。コンパイラーはこのキャストを自動的に行います。
  2. 狭義の型キャスト明示的な変換と呼ばれることがよくあります。このタイプのキャストでは、大きなデータ型がいくつかの小さなデータ型にキャストされるため、データが失われます。

したがって、ケース 3 の場合、コンパイラによって暗黙的に切り捨てられたデータは、手動で浮動小数点数にキャストされ、完全な有理数になります。この番号は、最大 8 桁のデータを表示します。

同様に、ケース 6 では、整数の除算を手動で double 値にキャストします。したがって、これにより、16 桁までの数値を表示する 10 進数になります。

上記のコードの出力については、以下のセクションを参照してください。

1
-1
-1
0
1.1111112
1.1111111111111112