3 回答

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

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

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