Hvorfor regner datamaskiner fra null?
Å telle fra null er en vanlig praksis i mange dataspråk, men hvorfor? Les videre når vi undersøker fenomenet og hvorfor det er så utbredt.
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:
Datamaskiner teller tradisjonelt tallverdier som starter fra null. For eksempel starter arrayer i C-baserte programmeringsspråk fra indeks null.
Hvilke historiske grunner eksisterer for dette, og hvilke praktiske fordeler som teller fra null har over å regne fra en?
Hvorfor faktisk? Like utbredt som øvelsen er det sikkert at det er praktiske årsaker til implementeringen.
Svaret
SuperUser-bidragsyter Matteo tilbyr følgende innsikt:
Telling arrays fra 0 forenkler beregningen av minneadressen til hvert element.
Hvis en matrise er lagret i en gitt posisjon i minnet (det kalles adressen) kan plasseringen av hvert element beregnes som
element (n) = adresse + n * size_of_the_element
Hvis du vurderer det første elementet først, blir beregningen
element (n) = adresse + (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 kompensasjon er ikke et krav, men bare en vane. Forskjellen til 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 starter med 0 er et bedre valg. Starter ved null gir en bedre representasjon av intervaller.
Hvis du ønsker å dykke 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.