2020/3/23

Javaプログラミング

short型の掛け算(乗算)

Java演算子'*'を使ってshort型どうしの掛け算を使用する際の注意点は以下のとおりです。

short型変数どうしの掛け算の結果を、shrot型の変数に格納しようとするとコンパイルエラーが起きるので、int型などshort型よりも持てる値の範囲が広い変数に格納するようにします。ただし、掛け算の結果をshort型型キャストすることでコンパイルエラーは避けられます。作成するプログラムの設計(仕様)で、掛け算の結果がshort型の範囲(-32768~32767)を超えない場合に限り、型キャストが使用できますが、範囲を超えた場合には想定外の数値がshort型に格納されるので注意してください。

Javaソースコード

short型を使った掛け算を行うJavaソースコードの具体例を見ていきましょう。

以下のソースコード”MultipliedSample1.java”は、short型整数どうしの掛け算を行おうとしたJavaソースコードですが、コンパイルに失敗します。

MultipliedSample1.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
//
// ※このソースコードは、コンパイルエラーに失敗します。
//   コンパイルエラーが出るソースコード例です。
//
public class MultipliedSample1 {
	public static void main( String[] args ) {
		// 変数の宣言
		short a, b, ans;

		// 掛ける値を代入
		a = 5000;
		b = 100;

		// 掛け算
		ans = a * b;	// ← コンパイルエラー

		// 掛け算の結果を表示
		System.out.print( a + "×" + b + "=" + ans );
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis MultipliedSample1.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac MultipliedSample1.java

コンパイル結果

MultipliedSample1.java:15: エラー: 不適合な型: 精度が失われる可能性があるintからshortへの変換
                ans = a * b;    // ← コンパイルエラー
                        ^
エラー1個

精度が失われる可能性があるという理由でコンパイルに失敗しています。

次のJavaソースコード”MultipliedSample2.java”は、”MultipliedSample1.java”コンパイルでエラーが出る箇所

		ans = a * b;

を変更して

		ans =  (short)( a * b );

としてコンパイルエラーを無くしたものです。これは、"a * b"の計算結果をshort型型キャストし、精度に関係なくshort型変数ansに代入するものです。

MultipliedSample2.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
public class MultipliedSample2 {
	public static void main( String[] args ) {
		// 変数の宣言
		short a, b, ans;

		// 掛ける値を代入
		a = 5000;
		b = 100;

		// 掛け算
		ans =  (short)( a * b );

		// 掛け算の結果を表示
		System.out.print( a + "×" + b + "=" + ans );
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis MultipliedSample2.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac MultipliedSample2.java

実行

C:\talavax\javasample>java MultipliedSample2

実行結果

5000×100=-24288

コンパイルには成功していますが、計算結果が実際の計算値(500000)と違っています。

これは、short型が持てる値の範囲は-32768~32767であるため、実際の計算値である500000を持つことが出来なかったために起こる現象です。(オーバーフロー

次のJavaソースコード”MultipliedSample3.java”は、”MultipliedSample1.java”掛け算の結果を、int型float型double型変数に代入することで正しい結果が得られるようにしたものです。

MultipliedSample3.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
public class MultipliedSample3 {
	public static void main( String[] args ) {
		// 変数の宣言
		short  a, b;
		int    ans_i;	// int型の結果
		float  ans_f;	// float型の結果
		double ans_d;	// double型の結果

		// 掛ける値を代入
		a = 5000;
		b = 100;

		// 掛け算した結果を代入
		ans_i = a * b;
		ans_f = a * b;
		ans_d = a * b;

		// 掛け算の結果を表示
		System.out.println( "int型: " + a + "×" + b + "=" + ans_i );
		System.out.println( "float型: " + a + "×" + b + "=" + ans_f );
		System.out.println( "double型: " + a + "×" + b + "=" + ans_d );
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis MultipliedSample3.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac MultipliedSample3.java

実行

C:\talavax\javasample>java MultipliedSample3

実行結果

int型: 5000×100=500000
float型: 5000×100=500000.0
double型: 5000×100=500000.0

short型より持てる値の範囲が広い型の変数掛け算の結果を代入することで正しい結果が得られています。

以上です。

関連コンテンツ

Javaの学習に役立つソースコードを多数紹介しています。是非、ご覧ください。

2022.09.10

基本的な計算である足し算(加法)/引き算(減法)/掛け算(乗法)/割り算(除法)を行うプログラム作成。

2020.03.23

プログラムの最初に実行されるメソッドは?

2022.12.13

九九(くく)の表を作る方法を詳しく解説しています。ソースコード付きです。

2019.01.03

掛け算を使わないで九九(くく)の表は作れるの?

2020.05.31

2次元の配列を使った九九(くく)の表の作り方を紹介しています。

2020.01.30

九九の表をコンソール出力する方法を紹介しています。出力にはprintfを利用しています。

2020.03.23

掛け合わせる値と、掛け合わせた値を表示する九九の表の作り方を紹介しています。

2024.10.03

変数やクラスに格納されている値をコンソール出力する方法は?

2020.03.23

プログラミングで使う変数って何?

2020.03.23

Javaのプログラムを書いてみませんか?プログラムの書き方をくわしく説明しています。

2020.03.23

「Javaソースコード」から実行可能な「オブジェクトコード」に変換する方法をくわしく説明しています。

2020.03.23

Javaのプログラムを作ってみませんか?プログラミングに必要なものの用意から実行までを説明しています。

2020.03.23

Swingパッケージを使ってグラフィック表示を行う方法を解説しています。

2020.03.23

画像フォーマット形式・色・大きさ・傾きなどの変更、特定の図形(文字・記号など)を見つけたり、取り出したりする画像処理について詳しく解説。

2015.11.29

繰り返し処理を使ったJavaのソースコードサンプルを紹介しています。

2020.03.23

配列を使うJavaソースコードを多数紹介しています。

2021.05.18

数学に関係するJavaのメソッドやソースコードなどを紹介しています。

2022.10.25

三角形、台形、円などいろいろな図形の面積を計算するプログラムを紹介しています。詳しくは、記事をご覧ください。

2021.05.18

StringクラスとStringBuilderクラスを利用したプログラミングの仕方を紹介しています。

2016.12.16

Javaを使った簡単な応用プログラム(生年月日から年齢を計算プログラムなど)を紹介しています。

2022.07.07

プログラミング、ITに関する用語をまとめています。

2022.10.17

日本で使われてきた伝統文様「和柄」について解説しています。

2022.07.27

プログラミング言語とは?種類や特徴について説明しています。

2022.08.03

データの型を変換する方法を詳しく解説しています。例)int型 → long型

2015.11.01

自然数と整数って何が違う?

2020.03.23

「ゆるゆるプログラム」のコンテンツを紹介しています。興味のある方はこの記事をご覧ください。

2020.03.23

広告