Promotion d'opérateur binaire lorsque le signe diffère
Lorsque les opérateurs binaires opèrent sur des opérandes avec des signatures différentes, la norme C fournit des directives spécifiques pour déterminer la promotion règles et le type résultant.
La section 5/9 de la norme décrit les « conversions arithmétiques habituelles » qui s'appliquent à ces opérateurs. Ces conversions suivent un ordre hiérarchique :
Appliquer ces règles aux exemples de code fournis :
Exemple 1 :
unsigned int one = 1; int max = std::numeric_limits<int>::max(); unsigned int result = max + one;
Puisque unsigned int a priorité sur int à l'étape 5 des règles, tous les opérandes sont convertis en int non signé. Par conséquent, le résultat est de type unsigned int.
Exemple 2 :
unsigned int us = 42; int neg = -43; int result = us + neg;
Dans ce cas, les règles dictent que les deux opérandes doivent être convertis en unsigned int. Cependant, la valeur résultante (-1) ne peut pas être représentée dans un entier non signé. Par conséquent, le type de résultat de l'expression est défini par l'implémentation conformément au §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!