2020.03.23
整数の割り算(除算)について
はじめに
Javaソースコード - 1~10の整数を10で割った結果
”DivisionSample5.java”は、1~10の整数を10で割った結果を表示するものです。
DivisionSample5.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066
public class DivisionSample5 { public static void main( String[] args ) { // 変数の定義 int a, b, ans; // 1を10で割る a = 1; b = 10; ans = a / b; System.out.println( a + "/" + b + "=" + ans ); // 2を10で割る a = 2; b = 10; ans = a / b; System.out.println( a + "/" + b + "=" + ans ); // 3を10で割る a = 3; b = 10; ans = a / b; System.out.println( a + "/" + b + "=" + ans ); // 4を10で割る a = 4; b = 10; ans = a / b; System.out.println( a + "/" + b + "=" + ans ); // 5を10で割る a = 5; b = 10; ans = a / b; System.out.println( a + "/" + b + "=" + ans ); // 6を10で割る a = 6; b = 10; ans = a / b; System.out.println( a + "/" + b + "=" + ans ); // 7を10で割る a = 7; b = 10; ans = a / b; System.out.println( a + "/" + b + "=" + ans ); // 8を10で割る a = 8; b = 10; ans = a / b; System.out.println( a + "/" + b + "=" + ans ); // 9を10で割る a = 9; b = 10; ans = a / b; System.out.println( a + "/" + b + "=" + ans ); // 10を10で割る a = 10; b = 10; ans = a / b; System.out.println( a + "/" + b + "=" + ans ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis DivisionSample5.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac DivisionSample5.java
実行
C:\talavax\javasample>java DivisionSample5
出力結果
1/10=0 2/10=0 3/10=0 4/10=0 5/10=0 6/10=0 7/10=0 8/10=0 9/10=0 10/10=1
0から9を10で割った結果は0で、10を10で割った結果が1となり、割り算の結果が切り捨てられていることが分かります。
Javaソースコード - 300/45をshort型で計算した結果をint型変数に代入
DivisionSample6.java
001 002 003 004 005 006 007 008 009 010 011 012 013
public class DivisionSample6 { public static void main( String[] args ) { // 変数の定義 short a, b; int ans; // 300を45で割る a = 300; b = 45; ans = a / b; System.out.println( a + "/" + b + "=" + ans ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis DivisionSample6.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac DivisionSample6.java
実行
C:\talavax\javasample>java DivisionSample6
出力結果
300/45=6
結果が6になりました。小数点を使って300/45の計算結果を表すと、6.666666…なので、この結果の小数点を切り捨てた6が整数の計算結果になります。
Javaソースコード - 300/45をint型で計算した結果をshort型変数に代入
DivisionSample7.java
001 002 003 004 005 006 007 008 009 010 011 012 013
public class DivisionSample7 { public static void main( String[] args ) { // 変数の定義 int a, b; short ans; // 300を45で割る a = 300; b = 45; ans = a / b; // ← コンパイルエラー System.out.println( a + "/" + b + "=" + ans ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis DivisionSample7.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac DivisionSample7.java
このソースは、コンパイルで失敗するので実行できません。
コンパイル時に、'エラー: 不適合な型: 精度が失われる可能性があるintからshortへの変換'というメッセージが表示されます。
これは変数の値の範囲によるもので、精度の高い整数変数(持てる値の範囲が広い)から精度の低い整数変数(持てる値の範囲が狭い)に代入できないことで起こるエラーです。ちなみに、short型の範囲は-32768~32767、int型の範囲は-2147483648~2147483647です。
Javaソースコード - 300/45をint型で計算した結果をshort型に型キャストして代入
DivisionSample8.java
001 002 003 004 005 006 007 008 009 010 011 012 013
public class DivisionSample8 { public static void main( String[] args ) { // 変数の定義 int a, b; short ans; // 300を45で割る a = 300; b = 45; ans = (short)( a / b ); // ← shortに型キャスト System.out.println( a + "/" + b + "=" + ans ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis DivisionSample8.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac DivisionSample8.java
実行
C:\talavax\javasample>java DivisionSample8
出力結果
300/45=6
結果が6になりました。