Maison  >  Article  >  développement back-end  >  Pourquoi `long long` se comporte-t-il différemment que prévu en C/C ?

Pourquoi `long long` se comporte-t-il différemment que prévu en C/C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-08 10:04:01134parcourir

Why does  `long long` behave differently than expected in 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!

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