17Aug
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 vraag van vandaag &Antwoord sessie komt naar ons met dank aan SuperUser-een onderverdeling van Stack Exchange, een community-gestuurde groepering van Q & A-websites.
De vraag
SuperUser-lezer DragonLord is benieuwd waarom de meeste besturingssystemen en programmeertalen vanaf nul tellen. Hij schrijft:
Computers traditioneel numeriek getallen beginnend vanaf nul. Bijvoorbeeld, arrays in op C gebaseerde programmeertalen beginnen vanaf index nul.
Welke historische redenen bestaan hierom en welke praktische voordelen telt het tellen vanaf nul meer dan het tellen van één?
Waarom inderdaad? Zoals gebruikelijk is, zijn er zeker praktische redenen voor de uitvoering ervan.
Het antwoord
SuperUser-bijdrager Matteo biedt de volgende inzichten:
Telwerkreeksen van 0 vereenvoudigen 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 als
-element( n) = adres + n * size_of_the_elementAls u het eerste element als eerste beschouwt, is de berekeningwordt
element( n) = adres +( n-1) * size_of_the_elementGeen 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 verschuiving 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 moet beginnen bij nul"( pdf), waarin hij uitlegt waarom het starten met 0 een betere keuze is. Vanaf nul is een betere weergave van bereiken mogelijk.
Als u op zoek bent om dieper op het antwoord in te gaan, is het Dijkstra-document een informatief bericht.
Heeft u iets toe te voegen aan de uitleg? Geluid uit in de opmerkingen. Wilt u meer antwoorden van andere technisch onderlegde Stack Exchange-gebruikers lezen? Bekijk de volledige discussiethread hier.