1. ホーム
  2. date

[解決済み] ゼロベース月番号【終了しました

2023-01-19 04:58:38

質問

人気のあるプログラミング言語の中には、月番号が1だけずれているものがあります -- JavaScript が思い浮かびますし、Java や、記憶が正しければ C 言語もそうです。いくつか質問があります。

  • 一般人が使用する月番号を無視するのであれば、一貫性を保つために を無視し、各月に 0 から始まる日数を付けるのはどうでしょうか。
  • なぜこれが一般的なのでしょうか?
  • そもそもこれは誰のアイデアなのでしょうか?

どのように解決するのですか?

カウントを開始するためにゼロを使用するのは、実際にはアセンブリ プログラマによる最適化のトリックです。カウント レジスタに 1 を代入する代わりに、レジスタをそれ自身と XOR し、CPU サイクルをわずかに高速化しました。これにより、カウントは 0 から始まり、常に最後の 1 つを除いた要素の長さまでカウントされることになります。

また、0 の使用は、割り当てられたメモリを指す 1 つのベース ポインターと、このベース ポインターからのオフセットにある 2 つ目のポインターを使用するポインター演算でもよく使用されます。この場合、オフセットをメモリブロックのベースに向けるために、値ゼロを使用することは非常に理にかなっています。(一般的な配列のロジックは、ベースアドレスにオフセット×レコードサイズを加えたものになる傾向があります)。

そして、ゼロベースの月番号は?多くの場合、多くのプログラミング環境では、あるデフォルトのデータからの日数として計算されます。1899 年 12 月 31 日はよく知られている日付ですが、基準日として使用される他の日付もたくさんあります。他の日付はすべてこの基準日からオフセットされ、1つの数値として保存されます。分数は時間、分、秒を表すのに使われ、0.25なら24/4=6時間となる。したがって、日付を実際の日付に変換するために、環境がしなければならないことは、この数字を実際の日付に変換することだけです。

しかし、ゼロベースの配列と1ベースの月の値の組み合わせは、問題をもたらします。 月 9 の月名を取得するには、月配列から項目 8 を取得する必要があります。開発者の中には、月番号を減らしてから名前を取得することに満足する人もいます。また、月番号ではなく名前を知りたいだけなので、月番号をゼロベースで表示することを好む人もいます。これは個人的な見解です。