【せいすうおーばーふろー】

整数オーバーフロー とは?

💡 数字が大きくなりすぎてひっくり返る、コンピュータの落とし穴
📌 このページのポイント
整数オーバーフロー:最大値を超えるとどうなる? 8ビット整数(0〜255)のイメージ 0 100 200 254 255 255 + 1 = 0 !? 32ビット符号付き整数 最大値: 2,147,483,647 +1すると: -2,147,483,648 プラスが突然マイナスに! 有名な事例 ・パックマン 256面バグ ・Ariane 5 ロケット爆発 ・2038年問題(Unix時刻)
整数オーバーフローのイメージ
ひよこ ひよこ

整数オーバーフローって何が起きるの?

ペンギン先生 ペンギン先生

コンピュータの整数には上限があって、それを超えると数値がぐるっと回って最小値になっちゃうんだ。車のオドメーター(走行距離計)が999999の次に000000に戻るのと同じ仕組みだよ。

ひよこ ひよこ

具体的にはどんな数で起きるの?

ペンギン先生 ペンギン先生

32ビットの符号付き整数なら2,147,483,647(約21億)が最大値。これに1を足すと-2,147,483,648になっちゃうんだ。プラスがいきなりマイナスになるから大問題だよ。

ひよこ ひよこ

実際に問題になったことはあるのかな?

ペンギン先生 ペンギン先生

有名なのはゲーム「パックマン」の256面バグ。8ビットのカウンタがオーバーフローして画面がバグるんだ。あとAriane 5ロケットは64ビットの値を16ビットに変換した時のオーバーフローで爆発してしまったよ。

ひよこ ひよこ

どうやって防げばいいの?

ペンギン先生 ペンギン先生

十分に大きな型を使う、計算前に範囲チェックする、Rustのようにオーバーフローを検出してくれる言語を使うなどの対策があるよ。2038年問題はUnixの時刻が32ビット整数の上限に達する問題で、Y2Kの次に来る時限爆弾として今も対応が進められているんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「整数オーバーフロー」って出てきたら「数が大きくなりすぎて壊れる現象」と思えればだいたいOK!
📖 おまけ:英語の意味
「Integer Overflow」 = 整数のあふれ
💬 Overflow(あふれる)は容器から水があふれるイメージ。数値が器に収まらなくなるからこの名前だよ
← 用語集にもどる