La sessione di domande e risposte di oggi ci viene fornita per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento di domande e risposte basato sulla comunità.
La domanda
Lettore SuperUser DragonLord è curioso di sapere perché la maggior parte dei sistemi operativi e dei linguaggi di programmazione conta da zero. Lui scrive:
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?
Perché davvero? Per quanto diffusa è la pratica, sicuramente ci sono ragioni pratiche per la sua attuazione.
La risposta
Il collaboratore di SuperUser Matteo offre le seguenti informazioni:
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
Se consideri il primo elemento il primo, il calcolo diventa
element(n) = address + (n-1) * size_of_the_element
Non un'enorme differenza, ma aggiunge una sottrazione non necessaria per ogni accesso.
Modificato per aggiungere:
- L'uso dell'indice dell'array come offset non è un requisito ma solo un'abitudine. L'offset del primo elemento potrebbe essere nascosto dal sistema e preso in considerazione durante l'allocazione e l'elemento di riferimento.
- Dijkstra ha pubblicato un articolo "Perché la numerazione dovrebbe iniziare da zero" (pdf) dove spiega perché iniziare con 0 è una scelta migliore. L'avvio a zero consente una migliore rappresentazione degli intervalli.
Se stai cercando di approfondire la risposta, la carta Dijkstra è una lettura informativa.
Hai qualcosa da aggiungere alla spiegazione? Sound off nei commenti. Vuoi leggere più risposte dagli altri utenti di Stack Exchange esperti di tecnologia? Controlla la discussione completa qui.