If-Koubou

Miksi tietokoneet laskevat nollasta?

Miksi tietokoneet laskevat nollasta? (Miten)


Laskeminen nollasta on hyvin yleinen käytäntö monilla tietokoneilla, mutta miksi? Lue, kun tutkitaan ilmiötä ja miksi se on niin yleistä.

Tämän päivän kysymys- ja vastausistunto tulee meihin SuperUserin hyväksi - Stack Exchangein alaosasto, joka on yhteisöllinen Q & A-sivustojen ryhmittely.

Kysymys

SuperUser-lukija DragonLord on utelias, miksi useimmat käyttöjärjestelmät ja ohjelmointikielet laskevat nollasta. Hän kirjoittaa:

Tietokoneet perinteisesti numeeriset arvot alkavat nollasta. Esimerkiksi C-pohjaisten ohjelmointikielten ryhmät alkavat nolla-indeksistä.

Mitä historiallisia syitä tähän liittyy ja mitä käytännön etuja nollasta lasketaan yli laskenta yhdestä?

Miksi todellakin? Niin laaja kuin käytännössä on, käytännössä on olemassa käytännön syitä sen toteuttamiseen.

Vastaus

SuperUser-avustaja Matteo tarjoaa seuraavat oivallukset:

Laskujen laskeminen 0: sta yksinkertaistaa kunkin elementin muistiosoitteen laskemista.

Jos taulukko tallennetaan tietyssä paikassa muistiin (sitä kutsutaan osoitteeksi), kunkin elementin sijainti voidaan laskea kuten

elementti (n) = osoite + n * koko_elementti 

Jos pidät ensimmäisen elementin ensimmäisenä, laskenta tulee

elementti (n) = osoite + (n-1) * koko_elementti 

Ei ole valtava ero, mutta se lisää tarpeetonta vähennyslaskua kullekin käyttöoikeudelle.

Muokattu lisätäksesi:

  • Taulukkoindeksin käyttäminen offsetina ei ole vaatimus vaan vain tapana. Järjestelmä voi piilottaa ensimmäisen elementin offsetin ja ottaa huomioon elementin allokoinnin ja viittauksen yhteydessä.
  • Dijkstra julkaisi paperin "Miksi numerointi tulisi aloittaa nollaan" (pdf), jossa hän selvittää, miksi aloittaminen alkaen 0 on parempi vaihtoehto. Nolla-arvosta alkaen mahdolli- suus näyttää paremmin alueita.

Jos etsit syventää vastausta, Dijkstra-paperi on informatiivinen lukeminen.

Onko jokin asia lisättävä selitykseen? Kuulkaa kommentit. Haluatko lukea lisää vastauksia muilta tech-tajuilta Stack Exchange-käyttäjiltä? Katso koko keskusteluketju täältä.