小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

ITエンジニア必見!『2038年問題』とは!

現在のパソコンやサーバーは、64ビットマシンも出てきましたが、まだまだ32ビットマシンが主流です。
32ビットで整数を表現すると、1ビット目は正負を表し、0が正の整数、1が負の整数となります。
なので、正の整数の最大値は31ビットで表され、2進数で0111 1111 1111 1111 1111 1111 1111 1111となり、10進数で2,147,483,647です。


一方、UNIX(liunx)系の32ビットマシンは、1970年1月1日0時0分0秒(UTC)からの経過秒数を使用しています。
この経過秒が、2038年1月19日3時14分7秒を過ぎると、なんと、2,147,483,647を超えてしまうのです。
すると、1ビット目が1になり、負の整数になってしまって、コンピュータが誤動作する可能性があるのです。


2038年には、すべて64ビットマシンになっていれば、問題がないかというと、実は、現在でもすでに影響が出ているのです。


あと28年、これは、2000年問題のレベルでなく、もっともっと深刻な状態になる可能性がありますね。
しかし、プログラマ特需の可能性も大なので、ものは考え様かも…。


とりあえず、28年後は、私は80才を軽く超えていますので、現役でいる可能性は限りなくゼロに近いです。
あ、そうそう、『2038年問題』の2年前にも『2036年問題』があります。


こちらは、NTPの時刻の表現に1900年1月1日 0時0分0秒 (UTC) からの積算秒数を使用しています。
この値は32ビット符号なしで表現されるため、すなわち42億9496万7295秒までしか表現できません。
これが、2036年2月6日 6時28分15秒(2月7日という説もある)にオーバーフローしてゼロになります。
NTPの時刻はWindows系で標準使用されているので、こちらも結構深刻ですね。
WindowsではActive Directoryにおいて時刻同期が必須となったためNTP機能が標準で組み込まれている)


ということで、『2038年問題』と『2036年問題』は、若いITエンジニアの人には必見ですね!

追記(簡単にまとめると)

  • 2038年問題』は、1970年1月1日0時0分0秒基点で31ビットのオーバーフローによるコンピュータの誤動作
  • 『2036年問題』は、1900年1月1日0時0分0秒基点で32ビットのオーバーフローによるコンピュータの誤動作