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 ?

  1. Aa < b est affiché
  2. Ba >= b est affiché
  3. 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.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases de la programmation en C

  1. unsigned int fait 32 bits. Quel est le comportement du code ci-dessus à l'exécution ?
  2. Un programme qui exécute « char c = 200; » puis affiche c avec %d dans printf affiche −56 lorsqu'il est compilé et exécuté avec gcc pour Linux sur x86-64, et 200 avec gcc pour Linux sur Arm. Quelle est la raison de cette différence ?
  3. Quelle est la sortie obtenue en exécutant le code ci-dessus, où b++ est écrit à droite de && et de || ?
  4. Quelle est la sortie obtenue en exécutant l'instruction switch ci-dessus, qui contient un case sans break ?
  5. Quelle est la sortie obtenue en exécutant le programme ci-dessus ?