Bases de la programmation en C

uint8_t x = 250;
for (int i = 0; i < 10; i++)
    x++;
printf("%d\n", x);

uint8_t est un type entier non signé de 8 bits. Quelle est la sortie obtenue en exécutant le code ci-dessus, qui incrémente x 10 fois ?

  1. A4
  2. B255
  3. C260
Afficher la réponse et l'explication

Réponse : A. 4

uint8_t peut représenter de 0 à 255. La norme prévoit qu'une valeur qui ne tient pas dans un type entier non signé devient le reste de sa division par 2⁸ = 256 : en comptant de 1 en 1 à partir de 250, la valeur qui suit 255 revient à 0. Après 10 incrémentations, on obtient le reste de la division de 250 + 10 = 260 par 256, soit 4. En revanche, le dépassement de capacité dans un calcul sur un type entier signé est un comportement indéfini.

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

Autres questions sur Bases de la programmation en C

  1. unsigned char fait 8 bits et int fait 32 bits. Quelle est la sortie obtenue en exécutant le code ci-dessus ?
  2. uint8_t est un type entier non signé de 8 bits et int fait 32 bits. Quel est le résultat de l'exécution du code ci-dessus ?
  3. int et unsigned int font 32 bits. Quel est le résultat de l'exécution du code ci-dessus ?
  4. unsigned int fait 32 bits. Quel est le comportement du code ci-dessus à l'exécution ?
  5. 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 ?