17Aug

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 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_element

Hvis du vurderer det første elementet først, beregner du beregningenblir

element( n) = adresse +( n-1) * size_of_the_element

Ikke 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.