Koduleht » kuidas » Miks arvutid arvutatakse nullist?

    Miks arvutid arvutatakse nullist?


    Nullist lugemine on väga levinud tava paljudes arvutikeeltes, kuid miks? Lugege seda nähtust uurides ja miks see on nii laialt levinud.

    Tänane küsimuste ja vastuste seanss saabub meiega kohtades, kus on SuperUser-Stack Exchange'i alajaotis, kogukondlikult juhitav Q&A veebisaitide rühmitus.

    Küsimus

    SuperUser-lugeja DragonLord on uudishimulik, miks enamik operatsioonisüsteeme ja programmeerimiskeeli arvestatakse nullist. Ta kirjutab:

    Arvutid vastavad tavapäraselt arvväärtustele, mis algavad nullist. Näiteks algavad C-põhiste programmeerimiskeelte massiivid indeksist null.

    Millised on selle ajaloolised põhjused ja millised praktilised eelised on nullist lugemine ühest?

    Miks tõesti? Nii laialt levinud kui praktika on selle rakendamiseks kindlasti praktilised põhjused.

    Vastus

    SuperUser'i toetaja Matteo pakub järgmisi teadmisi:

    0 massiivide lugemine lihtsustab iga elemendi mäluaadressi arvutamist.

    Kui massiiv salvestatakse mällu antud positsioonile (seda nimetatakse aadressiks), võib iga elemendi asukohta arvutada

    element (n) = aadress + n * size_of_the_element 

    Kui peate esimest elementi esimeseks, muutub arvutus

    element (n) = aadress + (n-1) * suuruse_osa_element 

    Ei ole suur erinevus, kuid see lisab iga juurdepääsu jaoks tarbetu lahutamise.

    Muudetud, et lisada:

    • Massiiviindeksi kasutamine nihkena ei ole nõue, vaid lihtsalt harjumus. Esimese elemendi nihke võib süsteem varjata ja arvesse võtta elementide eraldamisel ja viitamisel.
    • Dijkstra avaldas raamatu „Miks nummerdamine peaks algama nullist“ (pdf), kus ta selgitab, miks 0-st alustamine on parem valik. Alustades nullist, võimaldab vahemike paremat esitamist.

    Kui soovid sügavamale vastusesse sattuda, on Dijkstra paber informatiivne lugemine.


    Kas teil on midagi lisada selgitusele? Hääletage kommentaarides. Kas soovite lugeda rohkem vastuseid teistelt tech-savvy Stack Exchange'i kasutajatelt? Vaadake siin täielikku arutelu lõiku.