Maison > Article > développement back-end > Pourquoi `long long` se comporte-t-il différemment que prévu en C/C ?
Comprendre Long Long en C/C
Lorsque vous travaillez avec différents types de données en C et C, il est crucial de comprendre les nuances de chacun taper. Une idée fausse courante est le comportement de long long.
Considérez l'extrait de code suivant :
#include <stdio.h> int main() { int num1 = 1000000000; long num2 = 1000000000; long long num3; //num3 = 100000000000; long long num4 = ~0; printf("%u %u %u", sizeof(num1), sizeof(num2), sizeof(num3)); printf("%d %ld %lld %llu", num1, num2, num3, num4); return 0; }
La compilation de ce code génère une erreur lors de la suppression du commentaire de la ligne attribuant 100000000000 à num3 : "la constante entière est trop grand pour les caractères longs." Cependant, l'exécution du code avec la ligne commentée imprime toujours des valeurs supérieures à 1 000 000 000.
Ce comportement provient d'une idée fausse sur l'inférence de type. Le littéral 100000000000 est une constante entière, mais sa valeur dépasse la plage du type de données int (32 bits). Par conséquent, il s’agit d’une constante de type long. Cependant, par défaut, C et C considèrent ces littéraux comme int, ce qui conduit à l'erreur.
Pour résoudre ce problème, il est nécessaire de spécifier explicitement le type du littéral à l'aide d'un suffixe. Le suffixe LL déclare num3 comme un type long long :
long long num3 = 100000000000LL;
Cette modification permet au code de se compiler avec succès sans aucune erreur ni comportement inattendu.
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!