Maison >développement back-end >C++ >Pourquoi l'extrait de code échoue-t-il lors de l'attribution d'un grand littéral entier à une variable « long », mais fonctionne-t-il lors de l'utilisation de « long long » ?

Pourquoi l'extrait de code échoue-t-il lors de l'attribution d'un grand littéral entier à une variable « long », mais fonctionne-t-il lors de l'utilisation de « long long » ?

DDD
DDDoriginal
2024-11-08 11:12:02261parcourir

Why does the code snippet fail when assigning a large integer literal to a `long` variable, but works when using `long long`?

Comprendre le comportement de « long long » en C/C

Lorsque vous travaillez avec des types de données entiers en C/C, il est crucial de comprendre les nuances des représentations entières. Un type de données spécifique, « long long », soulève souvent des questions sur son comportement.

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;
}

Lors de l'exécution de ce code, vous pouvez rencontrer une erreur si vous décommentez la ligne commentée :

// num3 = 100000000000;

L'erreur se lit :

"erreur : la constante entière est trop grande pour le type long"

Cependant, lorsque vous compilez et exécutez le code sans décommenter cette ligne, il génère des valeurs nettement supérieures à 10000000000. Pourquoi ?

Comprendre les littéraux entiers et les types de données

En C/C, les littéraux entiers sont des constantes qui représentent des valeurs numériques. Le type d'un littéral entier est déterminé par un suffixe, tel que « L » ou « LL ». Sans suffixe, le littéral est traité comme un « int » par défaut.

Dans le code fourni, la valeur « 100000000000 » est trop grande pour être représentée dans un type de données « long ». Par conséquent, vous devez ajouter un suffixe pour indiquer le type de données souhaité.

Attribuer correctement le littéral

Pour résoudre l'erreur, vous devez attribuer le littéral en utilisant le suffixe correct , comme indiqué ci-dessous :

long long num3 = 100000000000LL;

Le suffixe « LL » signifie que le littéral doit être traité comme un type « long long », qui peut accueillir une plus grande plage de valeurs.

Le La ligne mise à jour attribue la valeur « 100000000000 » à « num3 » sans déclencher d'erreur. Cela garantit que la variable 'num3' peut contenir et fonctionner sur la grande valeur numérique prévue.

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