-3

UNIX やMySQL のタイムスタンプなどで何度も見てきました。エポックは 1970 年 1 月 1 日から始まりますが、記録可能な最大の年は 2038 年です。

2^32/60/60/24/365+1970
2106

したがって、完全な 32 ビットを使用すると、問題なく 2106 年に自然に到達します。しかし、どうやら 2038 年は 31 ビットにしか対応していないようです。では、なぜ 1 ビットを捨てるのでしょうか。完全な 32 ビットを使用することで、最初に地球を破壊する可能性があるため、問題を解決する必要がないことを期待できます...

コメントへの反応: もちろん、署名されているためですが、タイムスタンプに署名する必要があるのはなぜですか?? それがこの質問のポイントです。

4

2 に答える 2

2

これはおそらく「time_t が署名されていて署名されていない理由」に該当する可能性があります。

Unix の time_t を署名付きにするか署名なしにするかについては、もともといくつかの論争がありました。署名されていない場合、将来の範囲は 2 倍になり、32 ビット オーバーフローが延期されます (68 年まで)。しかし、それでは 1970 年より前の時代を表現することはできなくなります。デニス・リッチーは、この問題について尋ねられたとき、彼はそれについてあまり深く考えていなかったと述べましたが、彼の生涯のすべての時代を表現する能力はいいだろう。(Ritchie の誕生は 1941 年であり、Unix 時間で -893 400 000 前後です。) コンセンサスは time_t に署名することであり、これが通常のやり方です。QNX オペレーティング システムのバージョン 6 のソフトウェア開発プラットフォームには、符号なしの 32 ビット time_t がありますが、古いリリースでは符号付きの型が使用されていました。

于 2014-02-10T20:04:09.253 に答える