Maison > développement back-end > C++ > Entiers en C : un peu d'histoire

Entiers en C : un peu d'histoire

Mary-Kate Olsen
Libérer: 2025-01-01 09:12:11
original
233 Les gens l'ont consulté

Integers in C: A Bit of History

Les entiers constituent la structure de données la plus fondamentale en informatique, si nous pouvons même les appeler une « structure ». Notre travail en tant que programmeurs est de donner un sens à ces chiffres. Quelle que soit la complexité du logiciel : au final, ce n'est qu'un entier, et votre processeur ne comprend que les entiers.

Si nous avons besoin de nombres négatifs, nous avons inventé le complément à deux. Si nous avons besoin de nombres fractionnaires, nous créons une sorte de notation scientifique et – boum – nous avons un flotteur. En fin de compte, on ne peut échapper aux zéros et aux uns.


Petite histoire des entiers

En C, l'int est presque du type naturel. Bien que les compilateurs puissent se plaindre, avec quelques indicateurs ici et là, la plupart vous permettront d'écrire quelque chose comme ceci :

main(void) {
    return 0;
}
Copier après la connexion

Techniquement, cela équivaut à :

int main(void) {
    return 0;
}
Copier après la connexion

Ce comportement vient d'une époque où il était de bon sens de supposer que, si le programmeur ne spécifiait pas de type, il était raisonnable d'utiliser par défaut un nombre entier.

C a été conçu avec cette idée en tête. Au départ, int n’avait pas de taille standard. Le processeur PDP-11 — la machine pour laquelle C a été créé à l'origine — utilisait un adressage 16 bits. On a donc supposé qu'il était logique qu'un int soit également de 16 bits. L'idée était que la taille de int augmenterait à mesure que les processeurs évolueraient.

La taille mystérieuse

Cette approche a créé quelques problèmes. Si la taille de int varie selon les plates-formes, les programmes compilés pour différents processeurs pourraient se comporter différemment. Cela a brisé l'idée selon laquelle C était un langage « agnostique » qui compile sur diverses architectures.

Contrairement à int, le char, par exemple, avait toujours une taille bien définie : 8 bits, signé. Malgré son nom, char n'est pas un type abstrait pour les caractères de texte ; c'est juste un nombre de 8 bits. Par exemple, le littéral « a » est converti au moment de la compilation en nombre 97, clair et simple.

Et qu'en est-il des autres types, comme les courts et les longs ? L'idée était simple :

short <= int <= long
Copier après la connexion

Les implémenteurs du compilateur avaient toute liberté pour décider des tailles spécifiques.

ANSI C (1989) apporte un peu d'ordre

Avec la norme ANSI C, quelques règles ont été établies :

  • char : au moins 8 bits
  • bref : au moins 16 bits
  • int : la taille d'un court ou plus grand (16 ou 32 bits)
  • long : au moins 32 bits

Cette organisation a aidé, mais la taille de int est restée pour le moins déroutante. Les choses se sont améliorées avec la norme C99, qui a introduit l'en-tête stdint.h.

Nous avons maintenant des types de taille fixe :

  • int8_t : 8 bits
  • int16_t : 16 bits
  • int32_t : 32 bits
  • int64_t : 64 bits

Dès lors, c'était au compilateur d'implémenter cet en-tête avec des types de taille fixe.


L'état actuel des entiers

Aujourd'hui, avec des compilateurs modernes comme GCC et Clang, les tailles sont plus prévisibles :

Type Size
char 8 bits
short 16 bits
int 32 bits
long 64 bits (32 bits on 32-bit systems)
long long 64 bits

Même si le long long est quand même un peu particulier, au moins il apporte une certaine cohérence (je trouve même le long long stylé, pour être honnête).


Ce qu'il faut faire?

Aujourd'hui, nous sommes bien équipés avec des en-têtes comme stddef.h et stdint.h. Utilisez int uniquement lorsque cela est nécessaire, comme pour le type de retour de la fonction principale. Pour tout ce qui va au-delà du prototypage, préférez utiliser des entiers de taille fixe de stdint.h, et pour les indices de tableau ou les boucles, utilisez size_t de stddef.h. J'espère que cela vous évitera quelques maux de tête plus tard.

Merci d'être arrivé jusqu'ici — à la prochaine fois !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal