Hemsida » hur » Varför räknar Datorer från noll?

    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 Question & Answer-session 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 taler traditionellt numeriska värden från noll. Exempelvis börjar arrayer i C-baserade programmeringsspråk från index noll.

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

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

    Svaret

    SuperUser-bidragsgivare 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 positionen för varje element beräknas som

    element (n) = adress + n * size_of_the_element 

    Om du anser det första elementet först blir beräkningen

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

    Inte en stor 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 en kompensation är inte ett krav utan bara en vana. Förskjutningen av det första elementet kan döljas av systemet och beaktas 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 du 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.