altairのブログ

若手エンジニアの備忘録

Math.absで最小値を扱うと負の値を返す

概要

Javaの実装でMath.abs()を使う際にその型の最小値を渡すと絶対値の戻り値なのに負の値を返すことがあります。 具体例を見ていきます。

具体例

  • Integerの最小値
Math.abs(Integer.MIN_VALUE)  
//-2147483648
  • Shortの最小値
(short) Math.abs(Short.MIN_VALUE) 
//-32768

理由

Integerの範囲:-2147483648から2147483647
→2147483648が表せない
Shortの範囲:-32768から32767
→32768が表せない
このように最小値のほうが最大値より絶対値が1小さいため、最小値の絶対値は同じ型では表すことができないということがわかると思います。

感想

当たり前な気がしますが、意外と今まで気付かなかったです。。
絶対値がマイナスを返すわけないという前提を破るので頭に入れておきます。