Contare da zero è una pratica molto comune in molti linguaggi informatici, ma perché? Continua a leggere mentre esploriamo il fenomeno e perché è così diffuso.
La sessione di domande e risposte di oggi ci arriva per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento guidato dalla comunità di siti web di domande e risposte.
La domanda
Il lettore SuperUser DragonLord è curioso di sapere perché la maggior parte dei sistemi operativi e dei linguaggi di programmazione contano da zero. Lui scrive:
I computer tradizionalmente calcolano valori numerici a partire da zero. Ad esempio, gli array nei linguaggi di programmazione basati su C iniziano dall'indice zero.
Quali ragioni storiche esistono per questo, e quali vantaggi pratici ha il conteggio da zero rispetto al conteggio da uno?
Perché davvero? Per quanto diffusa sia la pratica, sicuramente ci sono ragioni pratiche per la sua attuazione.
La risposta
Il collaboratore di SuperUser Matteo offre i seguenti approfondimenti:
Il conteggio di array da 0 semplifica il calcolo dell'indirizzo di memoria di ogni elemento.
Se un array è memorizzato in una data posizione in memoria (è chiamato indirizzo) la posizione di ogni elemento può essere calcolata come
elemento (n) = indirizzo + n * size_of_the_elementSe consideri il primo elemento il primo, il calcolo diventa
elemento (n) = indirizzo + (n-1) * size_of_the_elementNon è una differenza enorme ma aggiunge una sottrazione non necessaria per ogni accesso.
Modificato per aggiungere:
- L'utilizzo 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'assegnazione e il riferimento all'elemento.
- Dijkstra ha pubblicato un documento "Perché la numerazione dovrebbe iniziare da zero" ( pdf ) dove spiega perché iniziare con 0 è una scelta migliore. Iniziare da zero consente una migliore rappresentazione degli intervalli.
Se stai cercando di approfondire la risposta, il documento Dijkstra è una lettura informativa.
Hai qualcosa da aggiungere alla spiegazione? Suona nei commenti. Vuoi leggere altre risposte da altri utenti esperti di tecnologia Stack Exchange? Dai un'occhiata al thread di discussione completo qui .