Skip to content

20260106_int型の範囲、オーバーフローについて

Javaのint型は符号付き32bitで表現できる範囲、すなわち-2,147,483,648~2,147,483,647が範囲である。重要な点として、int型変数がこの範囲を超える場合(オーバーフロー)に、エラーが発生しない。例えば以下のような計算結果となる。

java
int a = 2147483647; //int型のMAX値
int b = a+1;
System.out.println(b); //-2147483648 <-int型のMIN値

計算の仕組みは2進数やら補数表現やらを理解する必要があり、別途調査することにするが、「エラーが発生しないことで、バグに気づきにくい」点を覚えておく。

金額など、絶対に間違えられない数値は、オーバーフローの可能性を考慮してlong型の利用などを検討する必要がある(Math.addExact()を使えばオーバーフロー時に例外を投げてくれるらしい)。