なんのこっちゃと思うかも知れないがいわゆる
2038年問題(イメージ)という奴で
Wikipediaの記事に少し補足して「符号付整数(long int)」で桁あふれを起こすと何故いきなり負の値になってしまうかを解説すると、
- 現代のコンピュータは0101…のデジタル記録なので、どんな数も内部では2進数として扱っている。(この一桁が「1ビット」と呼ばれる。8桁なら8ビット)
- 0か1しか扱えないので、このままでは負の値を扱うことができない。(人間ならマイナス記号を入れて終わりだが…)
- そこで、(1)いちばん左側の桁は符号(0=プラス、1=マイナス)として扱い(2)マイナスの場合は残りの桁を全て反転(0→1、1→0)させて1を足す(補数と言う)…というルールで表すことにした。
- このルールにより、ひとつの数は、8桁(8ビット、-128〜127)、16桁(16ビット、-32,768〜32,767)、32桁(32ビット、-2,147,483,648〜2,147,483,647)…の2進数で扱われる。
表記方法を変えてもっと大きな値も扱えるようにした型もあるがとりあえず無視 - 例えば127+1=128になる。これを8桁の2進数で表すと桁繰り上がりが発生して01111111+00000001=10000000になるが、左端は符号なので…