Tellen vanaf nul is een veel voorkomende praktijk in veel computertalen, maar waarom? Lees verder terwijl we het fenomeen onderzoeken en waarom het zo wijdverbreid is.
De vraag- en antwoordsessie van vandaag komt tot ons dankzij SuperUser - een onderdeel van Stack Exchange, een community-gedreven groepering van Q & A-websites.
De vraag
SuperUser-lezer DragonLord is benieuwd waarom de meeste besturingssystemen en programmeertalen vanaf nul tellen. Hij schrijft:
Computers tellen traditioneel numerieke waarden vanaf nul. Arrays in C-gebaseerde programmeertalen beginnen bijvoorbeeld vanaf index nul.
Welke historische redenen zijn er hiervoor, en welke praktische voordelen heeft tellen vanaf nul ten opzichte van tellen vanaf één?
Waarom inderdaad? Hoe wijdverbreid de praktijk ook is, er zijn zeker praktische redenen voor de implementatie ervan.
Het antwoord
SuperUser-bijdrager Matteo biedt de volgende inzichten:
Het tellen van arrays vanaf 0 vereenvoudigt de berekening van het geheugenadres van elk element.
Als een array op een bepaalde positie in het geheugen is opgeslagen (het wordt het adres genoemd), kan de positie van elk element worden berekend als
element (n) = adres + n * grootte_van_het_elementAls je het eerste element als het eerste beschouwt, wordt de berekening
element (n) = adres + (n-1) * grootte_van_het_elementGeen enorm verschil, maar het voegt een onnodige aftrek 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 aanmerking worden genomen bij het toewijzen van en verwijzen naar elementen.
- Dijkstra publiceerde een paper "Waarom nummering bij nul moet beginnen" ( pdf ) waar hij uitlegt waarom beginnen met 0 een betere keuze is. Beginnen bij nul zorgt voor een betere weergave van bereiken.
Als je dieper op het antwoord wilt ingaan, is de Dijkstra-paper een informatief artikel.
Iets toe te voegen aan de uitleg? Geluid uit in de reacties. Wilt u meer antwoorden lezen van andere technisch onderlegde Stack Exchange-gebruikers? Bekijk hier de volledige discussiethread .