Javaで整数の引き算(減算)でオーバーフローを検知する方法について記載します。
目次
整数の引き算(減算)でオーバーフローを検知する方法
Mathクラス の subtractExact メソッドを使用すると、オーバーフロー発生時に例外( java.lang.ArithmeticException )がスローされます。
引数には、int・long型 の値を指定することができます。
構文
Math.subtractExact( 値1, 値2 )
戻り値
引数に int型 を指定:戻り値も int型
引数に long型 を指定:戻り値も long型
引数に long型 を指定:戻り値も long型
1. int型の値を減算する
実行例( int型 の最小値 – 1 )
1 2 3 4 5 6 7 |
// int型の最小値(-2147483648)から1引く // -演算子を使用して減算する int num1 = Integer.MIN_VALUE - 1; // 2147483647( オーバーフロー発生 ) // Math.subtractExact を使用して減算する int num2 = Math.subtractExact(Integer.MIN_VALUE, 1); // 例外発生( ArithmeticException ) |
例外処理は、次のように try – catch で行います。
1 2 3 4 5 |
try { int num2 = Math.subtractExact(Integer.MIN_VALUE, 1); }catch( ArithmeticException e ) { // オーバーフロー時の処理 } |
2. long型の値を減算する
実行例( long型 の最小値 – 1 )
1 2 3 4 5 6 7 |
// long型の最小値(-9223372036854775808)から1引く // -演算子を使用して減算する long num1 = Long.MIN_VALUE - 1; // 9223372036854775807( オーバーフロー発生 ) // Math.subtractExact を使用して減算する long num2 = Math.subtractExact(Long.MIN_VALUE, 1); // 例外発生( ArithmeticException ) |
例外処理も、int型と同様に try – catch を使って処理します。
1 2 3 4 5 |
try { long num2 = Math.subtractExact(Long.MIN_VALUE, 1); }catch( ArithmeticException e ) { // オーバーフロー時の処理 } |