【せいすうおーばーふろー】
整数オーバーフロー とは?
最終更新:
💡 数値が整数型の器に収まらない、計算の落とし穴
整数の計算結果が表現できる範囲を超えてしまう現象。予期しない値になり、バグやセキュリティ脆弱性の原因となる。
📌 このページのポイント
整数オーバーフローって何が起きるの?
固定幅の整数には表せる範囲があるんだ。範囲を超えたとき、走行距離計のように折り返す方式もあるけど、検出してエラーにする方式もあるよ。負の側の限界を超える場合も含むんだ。
具体的にはどんな数で起きるの?
実際に問題になったことはあるのかな?
どうやって防げばいいの?
入力の範囲を確認し、必要な大きさの型や検出付き演算を使うんだ。Rustでも通常の演算の検出はビルド設定に依存するから、言語名だけで安心はできないよ。checked_addなら加算が範囲を超えたことを戻り値で確認できるんだ。
もっと詳しく知りたい人へ
結果の変数だけ64ビットにすれば防げる?
計算そのものが狭い型で行われると、代入前にあふれることがあります。Javaではint同士の乗算はintで計算されます。必要なら演算前にlongへ広げ、広げた型の範囲にも収まるか確認します。
まとめ:ざっくりこれだけ覚えればOK!
「整数オーバーフロー」って出てきたら「計算結果が、整数型で表せる範囲を超えること」と思えばだいたいOK!
📖 おまけ:英語の意味
「Integer Overflow」 = 整数のあふれ
💬 Overflow(あふれる)は容器から水があふれるイメージ。数値が器に収まらなくなるからこの名前だよ