Maison > développement back-end > C++ > Pourquoi la multiplication d'entiers entraîne-t-elle un débordement en C ?

Pourquoi la multiplication d'entiers entraîne-t-elle un débordement en C ?

Susan Sarandon
Libérer: 2024-11-11 15:12:03
original
1018 Les gens l'ont consulté

Why Does Integer Multiplication Lead to Overflow in C  ?

Débordement d'entiers : quand la multiplication mène au désastre

En C, il est essentiel de comprendre les tailles et les types d'entiers pour éviter d'éventuels débordements. Examinons l'extrait de code suivant :

long long int n = 2000*2000*2000*2000;    // overflow

long long int n = pow(2000,4);            // works
long long int n = 16000000000000;         // works
Copier après la connexion

Pourquoi la première ligne entraîne-t-elle un débordement, alors que les deux autres fonctionnent sans problème ?

Le coupable réside dans la façon dont C gère les littéraux entiers et opérations arithmétiques. Par défaut, les littéraux entiers sont du type le plus petit pouvant contenir leur valeur, mais pas plus petit que int. Dans ce cas, 2000 est un entier, généralement un type 32 bits.

Lors de l'exécution d'opérations arithmétiques, le compilateur suit des règles spécifiques basées sur les types d'opérandes. Dans ce scénario, la multiplication se fait avec des entiers, qui sont le plus grand des types impliqués. Cependant, l'affectation n'est pas pertinente car C ne déduit pas les types en fonction de la destination.

Le résultat de la multiplication, qui dépasse la capacité de int, est stocké sous forme int, conduisant à un débordement. C'est pourquoi la première ligne déclenche un débordement, alors que les deux autres ne le font pas.

Pour résoudre ce problème, on peut spécifier explicitement le type de constante utilisée dans la première ligne en ajoutant le suffixe LL (ou ll ). Cela garantit que le littéral est traité comme un long long int, évitant ainsi tout débordement.

En comprenant comment fonctionnent les types entiers et les opérations arithmétiques en C , nous pouvons éviter les pièges potentiels et garantir que notre code gère correctement la manipulation des données.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal