At tælle fra nul er en meget almindelig praksis på mange computersprog, men hvorfor? Læs videre, når vi udforsker fænomenet, og hvorfor det er så udbredt.
Dagens spørgsmål og svar-session kommer til os med tilladelse fra SuperUser - en underinddeling af Stack Exchange, en community-driven gruppe af Q&A websteder.
Spørgsmålet
SuperUser-læser DragonLord er nysgerrig efter, hvorfor de fleste operativsystemer og programmeringssprog tæller fra nul. Han skriver:
Computere tæller traditionelt numeriske værdier, der starter fra nul. For eksempel starter arrays i C-baserede programmeringssprog fra indeks nul.
Hvilke historiske årsager eksisterer der for dette, og hvilke praktiske fordele har optælling fra nul i forhold til optælling fra en?
Hvorfor faktisk? Så udbredt som praksis er, er der helt sikkert praktiske grunde til dens implementering.
Svaret
SuperUser-bidragyder Matteo tilbyder følgende indsigter:
Tæller arrays fra 0 forenkler beregningen af hukommelsesadressen for hvert element.
Hvis et array er gemt på en given position i hukommelsen (det kaldes adressen), kan hvert elements position beregnes som
element (n) = adresse + n * størrelse_af_elementetHvis du betragter det første element som det første, bliver beregningen
element (n) = adresse + (n-1) * størrelse_af_elementetIkke en enorm forskel, men det tilføjer en unødvendig subtraktion for hver adgang.
Redigeret for at tilføje:
- Brugen af matrixindekset som en forskydning er ikke et krav, men kun en vane. Forskydningen af det første element kunne skjules af systemet og tages i betragtning ved tildeling og henvisning til element.
- Dijkstra offentliggjorde et papir "Hvorfor nummerering skal starte ved nul" ( pdf ) hvor han forklarer, hvorfor start med 0 er et bedre valg. Start ved nul giver en bedre repræsentation af intervaller.
Hvis du ønsker at dykke dybere ned i svaret, er Dijkstra-papiret en informativ læsning.
Har du noget at tilføje til forklaringen? Lyder i kommentarerne. Vil du læse flere svar fra andre teknisk kyndige Stack Exchange-brugere? Tjek den fulde diskussionstråd her .