17Aug

Varför räknar Datorer från noll?


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 &Svarssession kommer till oss med tillstånd av SuperUser-en indelning av Stack Exchange, en community-driven gruppering av Q & A-webbplatser.

Frågan

SuperUser-läsare DragonLord är nyfiken på varför de flesta operativsystem och programmeringsspråk räknas från noll. Han skriver:

Datorer traditionellt talar numeriska värden som börjar från noll. Exempelvis startar arrayer i C-baserade programmeringsspråk från index noll.

Vilka historiska skäl finns det för detta, och vilka praktiska fördelar räknar från noll har över att räkna från en?

Varför faktiskt? Så utbredd som praktiken är det säkert praktiska skäl för genomförandet.

Svaret

SuperUser-bidragsgivaren Matteo erbjuder följande insikter:

Att räkna arrays från 0 förenklar beräkningen av minnesadressen för varje element.

Om en matris lagras i ett visst läge i minnet( det kallas adressen) kan varje elements position beräknas som

-element( n) = adress + n * size_of_the_element

Om du anser att det första elementet är det första beräkningenblir

element( n) = adress +( n-1) * size_of_the_element

Inte en stor skillnad, men den lägger till en onödig subtraktion för varje åtkomst.

Redigerad för att lägga till:

  • Användningen av array index som en kompensation ä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 fördelning och referenselement.
  • Dijkstra publicerade ett papper "Varför numrering bör börja vid noll"( pdf) där han förklarar varför börja med 0 är ett bättre val. Från och med noll tillåts en bättre representation av intervall.

Om du vill gräva djupare in i svaret är Dijkstra-pappret en informativ läsning.

Har något att lägga till förklaringen? Ljud av i kommentarerna. Vill du läsa mer svar från andra tech-savvy Stack Exchange-användare? Kolla in hela diskussionsgängan här.