Dagens Spørsmål & Svar-sesjon kommer til oss med høflighet av SuperUser-en underavdeling av Stack Exchange, en fellesskapsdrevet gruppering av Q & A-nettsteder.
Spørsmålet
SuperUser leser DragonLord er nysgjerrig på hvorfor de fleste operativsystemer og programmeringsspråk teller fra null. Han skriver:
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?
Hvorfor faktisk? Like utbredt som øvelsen er det sikkert at det er praktiske årsaker til implementeringen.
Svaret
SuperUser-bidragsyter Matteo tilbyr følgende innsikt:
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
Hvis du vurderer det første elementet først, blir beregningen
element(n) = address + (n-1) * size_of_the_element
Ikke en stor forskjell, men det legger til en unødig subtraksjon for hver tilgang.
Redigeres for å legge til:
- Bruken av arrayindeksen som en offset er ikke et krav, men bare en vane. Forskjellen fra det første elementet kan være skjult av systemet og tatt i betraktning ved tildeling og referanseelement.
- Dijkstra publiserte et papir "Hvorfor nummerering skal starte på null" (pdf) hvor han forklarer hvorfor å starte med 0 er et bedre valg. Starter ved null gir en bedre representasjon av intervaller.
Hvis du ønsker å dype dypere inn i svaret, er Dijkstra-papiret en informativ lesning.
Har du noe å legge til forklaringen? Lyde av i kommentarene. Vil du lese flere svar fra andre tech-savvy Stack Exchange-brukere? Sjekk ut hele diskusjonstråden her.