Bases de la programmation en C
unsigned int reg = 0x04;
if (reg & 0x04 == 0x04)
printf("ON\n");
else
printf("OFF\n");Le code ci-dessus a été écrit pour tester si le bit 2 de la valeur de registre reg vaut 1. Quel est le résultat de son exécution ?
- AON est affiché
- BOFF est affiché
- CUne erreur de compilation se produit, car & et == ne peuvent pas être écrits à la suite
Afficher la réponse et l'explication
Réponse : B. OFF est affiché
En C, la comparaison == a une priorité plus élevée que le ET bit à bit &. La condition est donc interprétée comme reg & (0x04 == 0x04) ; comme 0x04 == 0x04 vaut 1, on obtient 0x04 & 1 = 0, ce qui est faux, et OFF est affiché. Pour obtenir le sens voulu, on ajoute des parenthèses, comme dans (reg & 0x04) == 0x04. L'écriture est grammaticalement correcte et ne provoque pas d'erreur, mais l'option -Wall de gcc donne un avertissement.
Continuer : 9 autres questions sur Bases de la programmation en C