Bases de la programmation en C
uint8_t a = 0x0F;
if (~a == 0xF0)
printf("equal\n");
else
printf("not equal\n");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 ?
- Aequal est affiché
- BUne erreur de compilation se produit, car ~ ne peut pas s'appliquer à une valeur uint8_t
- Cnot equal est affiché
Afficher la réponse et l'explication
Réponse : C. not equal est affiché
Avant le calcul de ~a, a est converti par promotion entière en l'int 0x0000000F. ~a ne vaut donc pas 0xF0 sur 8 bits, mais 0xFFFFFFF0 sur 32 bits (−16 en tant qu'int), qui n'est pas égal à 0xF0 (240). Pour comparer sur 8 bits, on revient d'abord à un type de 8 bits, comme dans (uint8_t)~a == 0xF0. C'est une erreur fréquente lorsqu'on inverse une valeur de registre pour la comparer.
Continuer : 9 autres questions sur Bases de la programmation en C