Hjemmeside » hvordan » Hvorfor regner datamaskiner fra null?

    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.