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