Comment les règles de promotion régissent l'arithmétique des opérateurs binaires avec des types de signes mixtes
Considérez le code suivant :
int max = std::numeric_limits<int>::max(); unsigned int one = 1; unsigned int result = max + one;
Le L'opérateur calcule le résultat comme 2147483648, suggérant un int non signé comme type de retour. À l'inverse, dans le code suivant :
unsigned int us = 42; int neg = -43; int result = us + neg;
le résultat est -1, indiquant un type de retour int.
Résolution de la règle de promotion
Le C la norme définit des règles de promotion spécifiques pour les opérateurs binaires arithmétiques (C §5/9) :
Implications pour les exemples
Dans les deux exemples, les règles de promotion aboutissent à un type non signé pour le calcul de l'opérateur.
Exemple 1 : max et one sont promus en unsigned int, ce qui entraîne un type de retour non signé int.
Exemple 2 : Les règles de promotion ne dictent pas de gagnant clair entre int et unsigned int. Cependant, le type non signé est sélectionné, ce qui entraîne un débordement non signé du résultat. Puisque le résultat est finalement attribué à un int, la valeur résultante n'est pas définie selon C §4.7/3.
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!