Maison >développement back-end >C++ >Pourquoi les littéraux entiers excessivement grands en C et C ne sont-ils parfois pas par défaut sur « int » ?

Pourquoi les littéraux entiers excessivement grands en C et C ne sont-ils parfois pas par défaut sur « int » ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-07 17:47:14482parcourir

Why Do Excessively Large Integer Literals in C and C   Sometimes Not Default to `int`?

Litéraux entiers : pas toujours int par défaut

Lors d'une itération en boucle, des littéraux entiers trop grands peuvent entraîner des problèmes inattendus. Normalement, les littéraux sans suffixes sont interprétés comme des int. Cependant, cette hypothèse peut ne pas être valable pour de très grandes valeurs.

Débordement et promotion

Lorsqu'un littéral entier dépasse la plage de int (généralement 32 bits), non défini un comportement (UB) peut en résulter. Cependant, dans certains cas, le compilateur peut automatiquement promouvoir le littéral vers un type plus grand, tel que long int (qui est généralement de 64 bits).

Spécifications standard

Les normes C et C réglementent la promotion des littéraux entiers aux valeurs appropriées. types.

  • C: La section 6.4.4.1 de la norme C99 indique que le type littéral est le premier répertorié dans lequel sa valeur peut être représentée (c'est-à-dire int, long int , long long int) ou un type entier étendu si nécessaire.
  • C : Section [lex.icon] Le paragraphe 2 de la norme C 11 spécifie de la même manière la promotion vers long int ou long long int selon les besoins.

Exemple

Considérez l'entier littéral 10000000000. Dans un environnement C, cela serait interprété comme un entier long. Cependant, si le compilateur utilisé est un compilateur 32 bits, cela pourrait entraîner une erreur de compilation car le littéral est trop grand pour les types entiers disponibles.

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!

Déclaration:
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