Maison  >  Article  >  développement back-end  >  Pourquoi 'long long' se comporte-t-il différemment de 'int' ou 'long' en C/C ?

Pourquoi 'long long' se comporte-t-il différemment de 'int' ou 'long' en C/C ?

DDD
DDDoriginal
2024-11-07 17:23:03670parcourir

Why does 'long long' behave differently than 'int' or 'long' in C/C  ?

Comprendre Long Long en C/C

En C et C, le type de données 'long long' représente un entier signé de 64 bits de précision. Cela lui permet de représenter des nombres extrêmement grands ou petits qui ne peuvent pas être pris en charge par des types entiers standard comme « int » ou « long ».

Dans l'extrait de code fourni, plusieurs questions ont été soulevées concernant le comportement de « long ». variables long' :

  • Taille de 'long long' : Pourquoi 'sizeof(num3)' produit-il 0, indiquant une variable non initialisée ?
  • Débordement d'entier :Pourquoi le code se compile-t-il et s'exécute-t-il sans erreur, produisant des valeurs bien supérieures à 10000000000 lorsque la ligne commentée ('num3 = 100000000000;') n'est pas commenté ?
  • Litéral Constantes entières :Pourquoi l'attribution d'une constante entière supérieure aux limites de type « long » à une variable « longue » entraîne-t-elle une erreur de compilation ?

Taille de « long long » :

L'opérateur 'sizeof' renvoie la taille d'une variable ou d'un type de données en octets. Puisque 'num3' n'est initialisé avec aucune valeur, il reste non initialisé et sa taille n'est pas définie, ce qui donne 0. Pour remédier à cela, initialisez explicitement 'num3' avec une valeur 'long long'.

Débordement d'entier :

C gère le débordement d'entier en silence. Lorsque la valeur attribuée à une variable dépasse sa capacité, elle recommence et continue de compter à partir de la valeur la plus basse. Dans ce cas, attribuer 1 000 000 000 à une variable « longue » entraîne un débordement et le résultat est une valeur négative. Cependant, puisque 'num2' est un 'long long', il peut accueillir une grande valeur sans débordement.

Constantes entières littérales :

En C et C, entier les constantes sont fortement typées. L'attribution d'une constante entière littérale qui dépasse les limites du type de données de destination entraîne une erreur de compilation. Dans cet exemple, la constante 100000000000 dépasse la plage de « long », et l'ajout de « LL » spécifie explicitement qu'elle doit être traitée comme une constante « long long ».

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