17Aug

Miksi tietokoneet laskevat nollasta?


Nollasta laskeminen on hyvin yleinen käytäntö useilla tietokoneilla, mutta miksi? Lue, kun tutkitaan ilmiötä ja miksi se on niin yleistä.

Päivän kysymys &Vastausistunto tulee meille kohteliaasti SuperUser-osastoon Stack Exchange, yhteisöllinen ryhmittely Q & A verkkosivuilla.

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 hyötyjä 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:

Laskentatyöt 0: stä yksinkertaistaa kunkin elementin muistin osoitteen laskemista.

Jos taulukko tallennetaan tietyssä paikassa muistiin( sitä kutsutaan osoitteeksi), jokaisen elementin paikka voidaan laskea

-elementiksi( n) = osoite + n * koko_taulukko

Jos tarkastellaan ensimmäisen elementin ensimmäistä, laskentatulee

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

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

Muokattu lisätäksesi:

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

Jos haluat etsiä syvempää vastausta, Dijkstra-paperi on informatiivinen luettava.

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