Certains langages de programmation populaires utilisent la numérotation des mois qui est décalée de 1 - JavaScript vient à l'esprit, tout comme Java, et si la mémoire est bonne, C en est un autre. J'ai quelques questions:
- Si vous allez ignorer la numérotation des mois utilisée par les profanes, alors pourquoi pas, par souci de cohérence, ignorez également le jour numérotation des utilisée par les profanes et numérotez les jours de chaque mois à partir de 0?
- Pourquoi est-ce si courant?
- À qui était cette idée en premier lieu?
date
language-agnostic
language-design
Robert L
la source
la source
Réponses:
L'utilisation de zéro pour commencer à compter est en fait une astuce d'optimisation des programmeurs d'assemblage. Au lieu d'attribuer 1 au registre de comptage, ils ont XOR'ed le registre avec lui-même, ce qui était légèrement plus rapide dans les cycles CPU. Cela signifiait que le comptage commencerait par 0 et serait toujours jusqu'à la longueur des éléments, à l'exclusion du dernier.
En outre, l'utilisation de zéro est également populaire avec l'arithmétique de pointeur où vous utiliseriez un pointeur de base pointant sur une mémoire allouée, plus un deuxième pointeur qui serait à un décalage par rapport à ce pointeur de base. Ici, utiliser la valeur zéro a beaucoup de sens pour pointer le décalage vers la base du bloc de mémoire. (La logique générale du tableau a tendance à être l'adresse de base plus le décalage x la taille de l'enregistrement.)
Et les numéros de mois basés sur zéro? Souvent, de nombreux environnements de programmation calculent les données en nombre de jours depuis certaines données par défaut. Le 31 décembre 1899 est une date populaire, bien qu'il y ait eu beaucoup d'autres dates utilisées comme date de base. Toutes les autres dates sont décalées de cette base et ne seront stockées que sous la forme d'un seul nombre. Les fractions seraient utilisées pour indiquer les heures, les minutes et les secondes, où 0,25 serait 24/4 = 6 heures. Ainsi, pour transformer une date en date réelle, il suffit à l'environnement de transformer ce nombre en date réelle.
Cependant, la combinaison de tableaux de base zéro et de valeurs de mois de base 1 pose un problème. Pour obtenir le nom du mois du mois 9, vous devez obtenir l'élément 8 du tableau des mois. Certains développeurs seraient heureux de réduire le nombre de mois avant d'obtenir son nom. D'autres ont préféré changer le mois en quelque chose de basé sur zéro puisque les gens veulent juste connaître le nom, pas le nombre. C'est un point de vue personnel.
la source
monthName[monthNumber]
oumon_name[tm_mon]
avec la notation time.h .C'est ce que c'est, et le poids énorme des logiciels construits sur cette hypothèse signifie qu'il va exister pendant un certain temps.
Mon opinion est que c'était la faute de C, et tous ces autres langages Johnie-come-récemment s'y sont conformés.
Vous obtenez des situations amusantes de personnes qui ne savent pas mieux. L'un des rares bogues de l'an 2000 que notre équipe a trouvés était un site Web proclamant fièrement que l'année était 19100 simplement parce qu'il préfixait l'
struct tm
année avec le littéral «19».la source
Oui, les Romains avaient également des problèmes avec zéro.
Ceci est
justeune conséquence [non intuitive] des mathématiques (étant une composante forte de la programmation, en particulier la programmation précoce) définissant zéro comme le premier (terme problématique celui-là) réel,positif* nombre naturel, et puisqu'un tableau est indexé avec réel , nombres naturels le "premier" élément est à l'index 0.Les mois sont en fait des valeurs nommées dans un tableau, où les jours et les années sont des valeurs numérotées - il serait peut-être plus utile de penser aux jours / années comme étant dans des tableaux qui ressemblent à {"1", "2", "3",. ..} eux-mêmes.
Quant à savoir pourquoi c'est si commun (en plus d'être mathématiquement correct), toutes les langues que vous avez énumérées descendent d'une origine commune pour une chose ...
Éditer:
En regardant plus loin, ce lien wikipedia détaille plusieurs bonnes et intéressantes raisons de l'indexation zéro (qui ne explique pas directement pourquoi les mois sont indexés à zéro mais je pense que c'est déjà couvert), et ce lien SO a déjà répondu à la question.
On dirait que l’opinion dominante est soit «un accident historique», soit «parce que les mois ne sont pas des nombres et ne peuvent donc pas être comparés au stockage jour / année» selon à qui vous demandez.
* Désolé, désolé, la physique! = Les maths reviennent pour me mordre. Je vais repasser mes mains maintenant.
la source
a[0]
==*(a + 0)
.