La séance de questions et réponses d’aujourd’hui nous est offerte par SuperUser, une sous-division de Stack Exchange, un groupe de sites Web de questions-réponses dirigé par la communauté.
La question
Lecteur superutilisateur DragonLord est curieux de savoir pourquoi la plupart des systèmes d'exploitation et des langages de programmation comptent à partir de zéro. Il écrit:
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?
Pourquoi vraiment? Aussi répandue que soit la pratique, il existe sûrement des raisons pratiques pour sa mise en œuvre.
La réponse
Le contributeur de SuperUser, Matteo, offre les informations suivantes:
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
Si vous considérez le premier élément comme le premier, le calcul devient
element(n) = address + (n-1) * size_of_the_element
Pas une différence énorme mais cela ajoute une soustraction inutile pour chaque accès.
Édité pour ajouter:
- L'utilisation de l'index de tableau en tant que décalage n'est pas une exigence, mais simplement une habitude. Le décalage du premier élément peut être masqué par le système et pris en compte lors de l'allocation et du référencement d'un élément.
- Dijkstra a publié un article «Pourquoi la numérotation devrait commencer à zéro» (pdf), où il explique pourquoi commencer par 0 est un meilleur choix. Partir de zéro permet une meilleure représentation des plages.
Si vous souhaitez approfondir la réponse, le document de Dijkstra est une lecture informative.
Avez-vous quelque chose à ajouter à l'explication? Sound off dans les commentaires. Voulez-vous lire plus de réponses d'autres utilisateurs de Stack Exchange doués en technologie? Découvrez le fil de discussion complet ici.