98 votes

Numérotation des mois base zéro

Certains populaire langages de programmation utilisent des mois de numérotation qui est désactivée par 1 -- JavaScript vient à l'esprit, comme le fait de Java, et si ma mémoire est bonne, C est une autre. J'ai quelques questions:

  • Si vous allez être ignorant le mois de numérotation utilisé par des laïcs, alors pourquoi pas pour des raisons de cohérence, aussi ignorer le jour de numérotation utilisé par des laïcs, et le nombre des jours de chaque mois, à compter à partir de 0 ?
  • Pourquoi est-ce si commun?
  • Qui a eu l'idée en premier lieu?

53voto

Wim ten Brink Points 12422

L'utilisation de zéro pour démarrer le comptage est en fait une optimisation astuce est de les programmeurs en assembleur. Au lieu d'attribuer 1 pour le comte s'inscrire, ils XOR ed le registre avec lui-même, qui a été légèrement plus rapide dans les cycles de PROCESSEUR. Cela signifiait que le décompte serait de commencer à 0 et on serait toujours à la longueur des éléments, à l'exclusion de la dernière.

Aussi, l'utilisation de zéro est également populaire avec l'arithmétique de pointeur lorsque vous utilisez une base de pointeur pointant sur certains alloué de la mémoire, et d'un second pointeur, ce qui serait un décalage à partir de cette base de pointeur. Ici, en utilisant la valeur zéro fait beaucoup de sens pour pointer le décalage à la base du bloc de mémoire. (Tableau général de la logique tend à être l'adresse de base, plus le décalage x taille d'enregistrement.)

Et de zéro à base de mois numéros? Souvent, de nombreux environnements de programmation calculer les données en nombre de jours depuis quelques de données par défaut. Le 31 décembre 1899 est un populaire date, bien qu'il y ait beaucoup d'autres dates utilisée comme date de base. Toutes les autres dates sont décalées à partir de cette base, et va tout simplement être stockées en un seul nombre. Les Fractions seraient utilisés 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, tout l'environnement de a à faire est de transformer ce nombre sur une date réelle.

Cependant, la combinaison de zéro à base de tableaux et 1 mois en fonction des valeurs de n'apporter un problème. Pour obtenir le nom du mois de 9 mois, vous devez obtenir l'élément 8 à partir du mois de tableau. Certains développeurs seraient heureux avec la diminution de la numéro du mois avant d'obtenir son nom. D'autres ont préféré changer de mois en quelque chose de base zéro, car les gens veulent juste savoir le nom, pas le nombre. C'est un point de vue personnel.

15voto

Quand nous abordons une date. Il a 3 composants année, mois, jour. L’année est un composant numérique. 2009. c’est pourquoi nous utilisons un nombre pour l’afficher. Jour est un composant numérique. 21. c’est pourquoi nous utilisons un nombre pour l’afficher. Mais le mois n’est pas une chose numérique. Il y a une étiquette attachée à elle. Comme janvier, février. C’est pourquoi nous utilisons indice basé système, lorsque nous afficher en tant que nombre. (à partir de 0)

6voto

paxdiablo Points 341644

C'est ce qu'il est, et le poids énorme de logiciel construit à cette hypothèse signifie qu'il va être là pour un certain temps.

Mon avis est que c'était la faute de C, et tous ces autres Johnie arrivé dernièrement, les langues étaient en conformité avec elle.

Vous obtenez des situations drôles de gens qui ne savent pas mieux. L'un des quelques bogues A2K notre équipe a été trouvé un site web annonçant fièrement l'année a été 19100 tout simplement parce qu'ils préfixé l' struct tm année avec le littéral "19".

4voto

annakata Points 42676

Oui, les Romains avaient des problèmes avec zéro.

C'est juste un [non-intuitif] conséquence de mathématiques (étant une composante importante de la programmation, surtout en début de programmation) de la définition de zéro, comme le premier (terme problématique que l'on) réel, positif* nombre naturel, et depuis un tableau est indexé avec de vrais nombres naturels le "premier" élément est à l'index 0.

Mois sont vraiment nommée des valeurs dans un tableau, où les jours et les années sont numérotés de valeurs, il serait peut-être plus utile de penser à jours/années comme étant dans des tableaux qui ressemblent à des { "1", "2", "3", ... } eux-mêmes.

Pourquoi c'est si commun (en plus d'être mathématiquement correct) bien toutes les langues que vous avez énumérés descendre à partir d'une origine commune pour une chose...

Edit:

En regardant plus loin en elle, ce wikipedia lien de détails plusieurs bonnes et intéressantes raisons de zéro indexation (qui ne concerne pas directement parler du pourquoi de mois sont de zéro indexés, mais je pense que c'est déjà couvertes), et cette SORTE de lien a répondu à la question avant.

Ressemble à l'opinion dominante est soit un "accident historique" ou "parce que les mois ne sont pas des nombres ne peut donc pas être comparé à jour/année de stockage" en fonction de qui vous demandez.

* Désolé, désolé, la physique!=les mathématiques de revenir à la mords-moi. Hors de repasser mes mains maintenant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X