技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

Javaの整数型の最大値

最近、仕事と関連していて頭を使う新たな趣味を始めようと思い、週末などに競技プログラミング (AtCoder) の過去問を黙々と解いている。言語は、速度やライブラリの充実度を考えると C++ が良さそうだったのだが、仕事で一番馴染んでいるのがJavaだったので、今はJavaで問題を解いている。

問題を解いていく中で、C~D問題以降では、変数の型に何も考えずに int 型を使っていると、桁あふれが起きて値が不正になってしまうことがある。また、int 型での桁あふれを見越して long 型を使っても、問題によっては桁あふれが起きてしまうことがあった。

そこで、今後問題を解く時に変数の型を何にするのかの目安として、int 型と long 型の最大値と、そのオーダー (10の何乗) をメモっておく。

  • int max

      10^9 < 2,147,483,647 < 10^10

  • long max

      10^18 < 9,223,372,036,854,775,807 < 10^19

 

なお、long max を超える整数を扱う場合、BigInteger 型を使うことになる。double 型でも扱える気がするかもしれないが、大きな整数を double 型で扱うと精度が落ちて計算結果が不正になることがあるので、(プリミティブ型でなくて重いが・・)、BigInteger 型を使う。