Bases de la programmation en C
int a = -1;
unsigned int b = 1;
if (a < b)
printf("a < b\n");
else
printf("a >= b\n");int et unsigned int font 32 bits. Quel est le résultat de l'exécution du code ci-dessus ?
- Aa < b est affiché
- Ba >= b est affiché
- CUne erreur de compilation se produit, car une valeur signée et une valeur non signée ne peuvent pas être comparées
Afficher la réponse et l'explication
Réponse : B. a >= b est affiché
Pour comparer un int et un unsigned int, les deux valeurs sont d'abord converties en unsigned int (conversions arithmétiques usuelles). En unsigned int, −1 devient 2³² − 1 = 4294967295, qui est supérieur à 1 : a < b est faux. C'est donc « a >= b » qui est affiché. Avec gcc, l'option -Wextra (ou -Wsign-compare) donne un avertissement pour les comparaisons qui mélangent valeurs signées et non signées.
Continuer : 9 autres questions sur Bases de la programmation en C