Maison > Article > développement back-end > Comment les conversions arithmétiques habituelles de C gèrent-elles les opérations mixtes sur les entiers signés et non signés ?
Règles de promotion pour les opérateurs binaires à signatures mixtes
Les opérateurs qui prennent des opérandes de types arithmétiques effectuent des conversions automatiques et déterminent le type de résultat selon des règles prédéfinies . Lorsque les opérandes ont des signatures différentes, C suit le processus de conversion arithmétique habituel décrit au §5/9 de la norme C.
Dans le premier exemple :
int max = std::numeric_limits<int>::max(); unsigned int one = 1; unsigned int result = max + one;
Les promotions intégrales sont effectuées, convertir à la fois max et one en int, ce qui donne un résultat int non signé. La signature de max est ignorée, ce qui conduit à un résultat de 2147483648.
Dans le deuxième exemple :
unsigned int us = 42; int neg = -43; int result = us + neg;
Les conversions suivent la règle selon laquelle l'opérande non signé est prioritaire, ce qui fait que neg est converti en un type non signé. Cette conversion aboutit à une valeur définie par l'implémentation pour le résultat int puisque la valeur de us neg n'est pas représentable comme int.
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!