17Aug
Å 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 er null. Han skriver:
Datamaskiner taler 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 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-bidragsyteren Matteo tilbyr følgende innsikt:
Tellearrayer fra 0 forenkler beregningen av minnesadressen til hvert element.
Hvis en matrise lagres i en gitt posisjon i minnet( det kalles adressen), kan hvert elements posisjon beregnes som
element( n) = adresse + n * size_of_the_elementHvis du vurderer det første elementet først, beregner du beregningenblir
element( n) = adresse +( n-1) * size_of_the_elementIkke en stor forskjell, men det legger til en unødvendig subtraksjon for hver tilgang.
Redigert 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 starter 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.