Šodienas jautājumu un atbilžu sesija mums priecājas par SuperUser - Stack Exchange dalību, kas ir kopienas vadīta Q & A tīmekļa vietņu grupa.
Jautājums
SuperUser lasītājs DragonLord ir interesanti par to, kāpēc lielākā daļa operētājsistēmu un programmēšanas valodu tiek skaitītas no nulles. Viņš raksta:
Computers traditionally tally numerical values starting from zero. For example, arrays in C-based programming languages start from index zero.
What historical reasons exist for this, and what practical advantages does counting from zero have over counting from one?
Kāpēc patiešām? Tā kā prakse ir plaši izplatīta, noteikti ir praktiski iemesli tās īstenošanai.
Atbilde
SuperUser ieguldītājs Matteo piedāvā šādu ieskatu:
Counting arrays from 0 simplifies the computation of the memory address of each element.
If an array is stored at a given position in memory (it’s called the address) the position of each element can be computed as
element(n) = address + n * size_of_the_element
Ja jūs pirmo reizi uzskatāt pirmo elementu, aprēķins kļūst
element(n) = address + (n-1) * size_of_the_element
Nav milzīgas atšķirības, bet katrai piekļuvei tas rada nevajadzīgu atņemšanu.
Rediģēts, lai pievienotu:
- Masīva indeksa izmantošana kā nobīde nav prasība, bet tikai ieradums. Sistēma slēpjas ar pirmā elementa nobīdi un tiek ņemta vērā, piešķirot un atsaucoties uz elementu.
- Dijkstra publicēja rakstu "Kāpēc numerācija jāsāk ar nulli" (pdf), kur viņš paskaidro, kāpēc, sākot ar 0, ir labāka izvēle. Sākot ar nulli, tiek nodrošināta labāka diapazonu attēlošana.
Ja jūs vēlaties padziļināt atbildi, Dijkstra papīrs ir informatīvs lasījums.
Vai kaut ko pievienot paskaidrojumam? Skatieties komentāros. Vēlaties lasīt citas atbildes no citiem tehnoloģiju savvy Stack Exchange lietotājiem? Šeit skatiet pilnu diskusiju pavedienu.