Pourquoi 200020002000*2000 provoque un débordement en C
Lors de l'attribution de la valeur de 20002000 2000*2000 à un variable long long, un débordement se produit. Cependant, utiliser pow(2000,4) ou attribuer directement 160000000000000 à un long long int n'entraîne pas de débordement.
Raison du débordement
Les littéraux entiers 2000 sont implicitement convertis en type int par défaut, ce qui est généralement 32 bits. Les opérateurs arithmétiques promeuvent toujours les arguments vers le plus grand des types présents, mais pas plus petit que int. Par conséquent, dans ce cas, la multiplication est effectuée comme int*int, ce qui produit un résultat int.
Scénarios de débordement et de non-débordement
Dans le deuxième scénario , où pow(2000,4) est utilisé, la fonction pow favorise le double des arguments et renvoie une valeur double. Cela garantit qu'aucun débordement ne se produit pendant le calcul.
Dans le troisième scénario, où 16000000000000 est directement affecté à un long long int, le littéral est suffisamment grand pour être implicitement converti en long long. L'affectation est donc effectuée sans problème.
Résolution
Pour éviter tout débordement dans le premier scénario, vous devez explicitement convertir les littéraux entiers en long long en utilisant le suffixe LL :
long long n = 2000LL*2000LL*2000LL*2000LL;
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!