Miksi tietokoneet laskevat nollasta?

Sisällysluettelo:

Miksi tietokoneet laskevat nollasta?
Miksi tietokoneet laskevat nollasta?
Anonim
 Laskeminen nollasta on hyvin yleinen käytäntö monilla tietokoneilla, mutta miksi? Lue, kun tutkitaan ilmiötä ja miksi se on niin yleistä.
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:

Computers traditionally tally numerical values starting from zero. For example, arrays in C-based programming languages start from index zero.

What historical reasons exist for this, and what practical advantages does counting from zero have over counting from one?

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:

Counting arrays from 0 simplifies the computation of the memory address of each element.

If an array is stored at a given position in memory (it’s called the address) the position of each element can be computed as

element(n) = address + n * size_of_the_element

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

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

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ä.

Suositeltava: