3 回答

TA貢獻1818條經驗 獲得超11個贊
使用零開始計數實際上是Assembly程序員的一種優化技巧。他們沒有將1分配給計數寄存器,而是對其進行了異或運算,這在CPU周期中略快。這意味著計數將從0開始,并且始終取決于元素的長度(不包括最后一個元素)。
另外,在指針算術中也使用零,在這種情況下,您將使用一個基本指針指向某些已分配的內存,再加上第二個指針,該指針與該基本指針的偏移量。在這里,使用零值將偏移量指向存儲塊的基數很有意義。(一般的數組邏輯往往是基地址加上偏移量x記錄大小。)
從零開始的月份數字?通常,許多編程環境自某些默認數據起將數據計算為幾天。1899年12月31日是一個受歡迎的日期,盡管還有許多其他日期用作基準日期。所有其他日期都偏離此基準,并且將僅存儲為一個數字。分數將用于表示小時,分鐘和秒,其中0.25表示24/4 = 6小時。因此,要將日期轉換為真實日期,所有環境要做的就是將此數字轉換為真實日期。
但是,從零開始的數組和從1開始的月份值的組合確實帶來了問題。要獲取第9個月的月份名稱,您必須從month數組中獲取第8項。一些開發人員會很樂意在獲得名稱之前減少月份數。其他人則傾向于將月份更改為從零開始的格式,因為人們只想知道名稱,而不是數字。這是個人觀點。

TA貢獻1798條經驗 獲得超3個贊
就是這樣,基于此假設而構建的巨大軟件意味著這將持續一段時間。
我的看法是這是C的錯,所有其他后來才出現的語言也都遵循了C。
您會從不了解的人那里得到一些有趣的情況。我們的團隊發現的少數Y2K錯誤之一是一個網站,自豪地宣稱年份是19100,因為它們在struct tm
年份之前加上了文字“ 19”。

TA貢獻1809條經驗 獲得超8個贊
是的,羅馬人也有零問題。
這只是數學(是程序設計的重要組成部分,尤其是早期程序設計)的[非直覺]結果,將零定義為第一個(有問題的術語是一個)實數,正 *自然數,并且由于數組使用實數進行了索引,自然數,“第一個”元素位于索引0。
月實際上是數組中的命名值,其中天和年是編號的值-將天/年看成看起來像{“ 1”,“ 2”,“ 3”,...的數組可能會更有用。 .. } 他們自己。
至于為什么這是如此普遍(除了在數學上是正確的),您列出的所有語言都是出于同一原因而起源的……
編輯:
進一步研究它,這個Wikipedia鏈接詳細說明了零索引的幾個好而有趣的原因(它并沒有直接說明為什么月被零索引了,但我認為已經涵蓋了),因此,該SO鏈接已經回答了之前的問題。
似乎普遍的觀點是“歷史事故”或“因為月份不是數字,所以不能與日/年存儲進行比較”,具體取決于您問的是誰。
*對不起,對不起,物理!=有事再來咬我。現在去熨燙我的手。
- 3 回答
- 0 關注
- 856 瀏覽
添加回答
舉報