2進数 デジタル時代の 落し穴

 コンピュータは2進数で動いている。このことが原因で発生するトラブルは多い。逆に2進数を読みこなせるようになると、ITアーキテクトの武器にもなる。

 2進数が引き起こすトラブルの典型例は、2038年問題だろう。UNIX系OSの時刻表現が桁あふれして、コンピュータの処理結果が異常になる。

 2038年問題が発生するのは、2進数における負の整数の表現に関係している。負の整数は、必ず最上位のビットがオンになる。

 なぜUNIX系OSで発生するかといえば、UNIXを記述しているC言語のtime_t型が、1970年を起点とした経過秒数で表しているからだ。32ビットで経過秒数を管理していくと、2038年に最上位のビットがオンになり、マイナス扱いになってトラブルが発生する。

 32ビット環境の話ならば、2038年には64ビット環境に置き換わっているから大丈夫かと思うかもしれないが、2004年あたりからこれに関するトラブルが起きている。

 例えば、二つの日付のちょうど真ん中の日を計算する場合などだ。二つの日付データを加算し2で割るプログラムを動かそうとすると、加算した瞬間に合計の日付データが2038年を越し、マイナス扱いになってエラーになる。