Početna » kako da » Zašto računati računati od nule?

    Zašto računati računati od nule?


    Brojanje od nule vrlo je uobičajena praksa na mnogim računalnim jezicima, ali zašto? Čitajte dalje dok istražujemo fenomen i zašto je on tako raširen.

    Današnja sesija pitanja i odgovora dolazi nam ljubaznošću SuperUser-a, podjele Stack Exchangea, grupiranja web-lokacija za pitanja i odgovore u zajednici.

    Pitanje

    Čitač SuperUser DragonLord je znatiželjan o tome zašto se većina operativnih sustava i programskih jezika računa od nule. Piše:

    Računala tradicionalno označavaju numeričke vrijednosti počevši od nule. Na primjer, nizovi u programskim jezicima temeljenim na C-u počinju od nule indeksa.

    Koji povijesni razlozi za to postoje i koje praktične prednosti se računa od nule imaju više od jednog računajući?

    Zašto doista? Kao što je praksa raširena, zasigurno postoje praktični razlozi za njezinu provedbu.

    Odgovor

    Doprinositelj SuperUser-a Matteo nudi sljedeće uvide:

    Brojanje polja od 0 pojednostavljuje izračun memorijske adrese svakog elementa.

    Ako je niz pohranjen u određenom položaju u memoriji (to se zove adresa), položaj svakog elementa može se izračunati kao

    element (n) = adresa + n * veličina_izdjela 

    Ako prvi element smatrate prvim, računanje postaje

    element (n) = adresa + (n-1) * veličina_izdjela 

    Nije velika razlika, ali dodaje nepotrebno oduzimanje za svaki pristup.

    Uređeno za dodavanje:

    • Korištenje indeksa polja kao offset nije uvjet, već samo navika. Pomak prvog elementa može biti skriven od strane sustava i uzeti u obzir prilikom dodjeljivanja i referenciranja elementa.
    • Dijkstra je objavio članak „Zašto bi numeracija trebala početi od nule“ (pdf) gdje objašnjava zašto je početak s 0 bolji izbor. Počevši od nule omogućuje bolju zastupljenost raspona.

    Ako želite prodrijeti dublje u odgovor, Dijkstra papir je informativni tekst.


    Imate li što dodati objašnjenju? Zvuk isključen u komentarima. Želite li pročitati više odgovora od drugih tehničkih korisnika Stack Exchangea? Pogledajte cjelokupnu temu za raspravu ovdje.