Att räkna från noll är en mycket vanlig praxis på många datorspråk, men varför? Läs vidare när vi utforskar fenomenet och varför det är så utbrett.
Dagens Fråga & Svar-session kommer till oss med tillstånd av SuperUser - en underavdelning av Stack Exchange, en community-driven gruppering av Q & A-webbplatser.
Frågan
SuperUser-läsaren DragonLord är nyfiken på varför de flesta operativsystem och programmeringsspråk räknas från noll. Han skriver:
Datorer överensstämmer traditionellt med numeriska värden från noll. Till exempel börjar matriser i C-baserade programmeringsspråk från index noll.
Vilka historiska skäl finns för detta, och vilka praktiska fördelar har räkning från noll jämfört med räkning från en?
Varför verkligen? Så utbredd som praxis är, det finns säkert praktiska skäl för dess genomförande.
Svaret
SuperUser-bidragsgivaren Matteo erbjuder följande insikter:
Att räkna matriser från 0 förenklar beräkningen av minnesadressen för varje element.
Om en matris lagras på en viss position i minnet (det kallas adressen) kan varje elements position beräknas som
element (n) = adress + n * storlek_ av_elementetOm du betraktar det första elementet som det första blir beräkningen
element (n) = adress + (n-1) * storlek_ av_elementetInte en enorm skillnad men det lägger till en onödig subtraktion för varje åtkomst.
Redigerad för att lägga till:
- Användningen av matrisindex som förskjutning är inte ett krav utan bara en vana. Förskjutningen av det första elementet kan döljas av systemet och tas i beaktande vid tilldelning och referens av element.
- Dijkstra publicerade en uppsats "Varför numreringen bör börja med noll" ( pdf ) där han förklarar varför att börja med 0 är ett bättre val. Att börja med noll möjliggör en bättre representation av intervall.
Om du vill fördjupa dig i svaret är Dijkstra-dokumentet en informativ läsning.
Har du något att lägga till förklaringen? Ljud av i kommentarerna. Vill du läsa fler svar från andra tekniskt kunniga Stack Exchange-användare? Kolla in hela diskussionstråden här .