Waarom tellen computers van nul?
Tellen vanaf nul is een veel voorkomende praktijk in veel computertalen, maar waarom? Lees verder terwijl we het fenomeen verkennen en waarom het zo wijdverspreid is.
De Question & Answer-sessie van vandaag komt tot ons dankzij SuperUser - een onderdeel van Stack Exchange, een gemeenschapsgedreven groep van Q & A-websites.
De vraag
SuperUser-lezer DragonLord is benieuwd waarom de meeste besturingssystemen en programmeertalen vanaf nul tellen. Hij schrijft:
Computers traditioneel numerieke getallen beginnend vanaf nul. Bijvoorbeeld, arrays in op C gebaseerde programmeertalen beginnen vanaf index nul.
Welke historische redenen hiervoor bestaan, en welke praktische voordelen telt het tellen vanaf nul meer dan er vanaf rekenen?
Waarom inderdaad? Zoals gebruikelijk is, zijn er zeker praktische redenen voor de uitvoering ervan.
Het antwoord
SuperUser-bijdrager Matteo biedt de volgende inzichten:
Het tellen van arrays van 0 vereenvoudigt de berekening van het geheugenadres van elk element.
Als een array op een bepaalde positie in het geheugen wordt opgeslagen (dit wordt het adres genoemd), kan de positie van elk element worden berekend
element (n) = adres + n * size_of_the_element
Als je het eerste element als eerste beschouwt, wordt de berekening
element (n) = adres + (n-1) * size_of_the_element
Geen enorm verschil, maar het voegt een onnodige aftrekking toe voor elke toegang.
Bewerkt om toe te voegen:
- Het gebruik van de array-index als een offset is geen vereiste maar slechts een gewoonte. De offset van het eerste element kan door het systeem worden verborgen en in overweging worden genomen bij het toewijzen en verwijzen naar elementen.
- Dijkstra publiceerde een paper "Waarom nummering bij nul moet beginnen" (pdf), waarin hij uitlegt waarom het starten met 0 een betere keuze is. Vanaf nul geeft een betere weergave van de bereiken.
Als u op zoek bent om dieper op het antwoord in te gaan, is het Dijkstra-document een informatief boek.
Heb je iets toe te voegen aan de uitleg? Geluid uit in de reacties. Wilt u meer antwoorden van andere technisch onderlegde Stack Exchange-gebruikers lezen? Bekijk hier de volledige discussiethread.