3 回答

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

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

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