2016.01.20

変数

数値型変数の最小値と最大値

ここでは、プログラムの中で数値型変数最小値最大値を取得する方法を説明します。

以下の表は、変数の型ごとに最小値最大値を取得する方法をまとめたものです。MIN_VALUEで最小値、MAX_VALUEで最大値が取得できます。

変数型 最小値 最大値
byte Byte.MIN_VALUE Byte.MAX_VALUE
short Short.MIN_VALUE Short.MAX_VALUE
int Integer.MIN_VALUE Integer.MAX_VALUE
float Float.MIN_VALUE Float.MAX_VALUE
double Double.MIN_VALUE Double.MAX_VALUE

Javaソースコード その1

変数最小値最大値を表示するソースプログラムを作成しました。

MinMaxValue.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
public class MinMaxValue {
	public static void main( String[] args ) {
		System.out.println( "byteの最小値=" + Byte.MIN_VALUE );
		System.out.println( "byteの最大値=" + Byte.MAX_VALUE );
		System.out.println();
		System.out.println( "shortの最小値=" + Short.MIN_VALUE );
		System.out.println( "shortの最大値=" + Short.MAX_VALUE );
		System.out.println();
		System.out.println( "intの最小値=" + Integer.MIN_VALUE );
		System.out.println( "intの最大値=" + Integer.MAX_VALUE );
		System.out.println();
		System.out.println( "longの最小値=" + Long.MIN_VALUE );
		System.out.println( "longの最大値=" + Long.MAX_VALUE );
		System.out.println();
		System.out.println( "floatの最小値=" + Float.MIN_VALUE );
		System.out.println( "floatの最大値=" + Float.MAX_VALUE );
		System.out.println();
		System.out.println( "doubleの最小値=" + Double.MIN_VALUE );
		System.out.println( "doubleの最大値=" + Double.MAX_VALUE );
	}
} 

実行結果

MinMaxValue.javaの出力結果

byteの最小値=-128
byteの最大値=127

shortの最小値=-32768
shortの最大値=32767

intの最小値=-2147483648
intの最大値=2147483647

longの最小値=-9223372036854775808
longの最大値=9223372036854775807

floatの最小値=1.4E-45
floatの最大値=3.4028235E38

doubleの最小値=4.9E-324
doubleの最大値=1.7976931348623157E308

この結果から、floatとdoubleの最小値は、0.0(ゼロ)として扱わない数値の最小値であることがわかります。変数に格納できる範囲の最小は、それぞれの先頭にマイナスを付けた-Float.MAX_VALUE-Double.MAX_VALUEと考えて良いです。Float.MIN_VALUEDouble.MIN_VALUEを使うときには、これらのことに気を付けてください。

次に、これらの使い方を紹介します。

数値が扱えるJava変数には、byte型/short型/int型/long型/float型/double型があり、それぞれ格納できる数値の範囲が違います。変数への値の代入や計算のオーバーフローアンダーフローを避けるために変数が持てる値の範囲をプログラム中で取得し、数値が変数値の範囲内かどうかを判定します。これは、まず情報量の多い変数に値を代入・計算し、その結果が格納したい変数型の範囲内であれば、その変数に値を格納する方法で行われます。

具体的には、int型変数に計算結果を代入する場合、int型より情報量の多いlong型で計算を行い、その結果の範囲がint型の範囲に入っているかを判定し、範囲内であればlong型の値をint型変数型キャストして代入します。範囲外であれば、処理の中断/エラーメッセー表示などを行うようにします。ただし、int型どうしの計算でオーバーフローしないことが明らかであれば、このような処理は不要です。float型の計算も同様に、double型で計算した結果で判定します。

以下のソースコードは、int型どうしの計算でのオーバーフローの確認と、計算結果がint型の範囲に収まっているかの判定の仕方が分かるようになっています。

Javaソースコード その2

MinMaxValue2.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
public class MinMaxValue2 {
	public static void main( String[] args ) {
		int a, b;

		// オーバーフローした結果をそのまま表示
		a = 100000;
		b = 100000;
		int ans = a * b;

		System.out.println( "オーバーフロー有 : " + a + "x" + b + "=" + ans );

		// long型でオーバーフローを防ぐ
		long ansl =  (long)a *  (long)b;
		System.out.println( "オーバーフロー無 : " + a + "x" + b + "=" + ansl );

		// int型の変数に計算結果を代入できるかを判定
		if ( ( ansl <  (long)Integer.MIN_VALUE ) ||
							( ansl >  (long)Integer.MAX_VALUE ) )
			// 代入不可
			System.out.println( ansl + "をint型変数に代入できない" );
		else {
			// 代入可
			System.out.println( ansl + "をint型変数に代入できる" );
			// 型キャストして代入
			ans =  (int)ansl;
		}
	}
} 

実行結果

MinMaxValue2.javaの出力結果

オーバーフロー有 : 100000x100000=1410065408
オーバーフロー無 : 100000x100000=10000000000
10000000000をint型変数に代入できない

上記の出力結果のように、オーバーフローした計算結果もint型変数に格納されてしまい、その後の処理で異常が発生する可能性が高くなります。桁数の多い数値どうしの計算を行う処理には、情報量の多い型で計算して範囲の検査をすると安全に動作するプログラムが作成できます。

関連コンテンツ

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

2020.03.23

整数型の変数に8進数を代入する記述の仕方を説明します。

2017.05.16

for文で変数名iがよく使われる理由について説明しています。興味のある方は是非。

2022.08.29

計算の結果が∞となるときの表現方法について解説しています。

2016.02.15

各種データ型の変数にnullが代入できるかを確認しました。

2024.01.23

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

2020.03.23

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

2020.03.23

コンピュータを制御するために使用する入力機能と出力機能を持つ装置のことをコンソールといいます。興味のある方は、ご覧ください。

2020.08.24

コンピューター(computer)の意味を説明しています。

2022.07.22

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

2022.10.17

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

2022.12.13

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

2020.03.23

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

2020.03.23

条件式を判断して処理を分岐する方法を詳しく説明しています。

2023.03.20

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

2020.03.23

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

2022.09.10

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

2020.03.23

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

2015.11.29

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

2021.05.18

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

2022.10.25

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

2021.05.18

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

2016.12.16

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

2022.07.07

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

2022.07.27

2つの値のうち、小さい方の値と、大きい方の値を取得する方法。

2020.03.23

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

2022.08.03

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

2015.11.01

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

2020.03.23

広告