Bases de la programmation en C
unsigned char a = 200, b = 100;
int s = a + b;
unsigned char c = a + b;
printf("%d %d\n", s, c);unsigned char fait 8 bits et int fait 32 bits. Quelle est la sortie obtenue en exécutant le code ci-dessus ?
- A44 44
- B300 44
- C300 300
Afficher la réponse et l'explication
Réponse : B. 300 44
En C, les valeurs des types plus petits qu'int (comme char et short) sont converties en int avant tout calcul (promotion entière). a + b n'est donc pas calculé sur 8 bits mais en int, ce qui donne 300, et s, de type int, reçoit 300 tel quel. Lors de l'affectation à c, qui fait 8 bits, la valeur est convertie en 44, le reste de la division de 300 par 256. Même sur un microcontrôleur 8 bits, la norme veut que les calculs intermédiaires d'une expression se fassent sur la largeur d'un int.
Continuer : 9 autres questions sur Bases de la programmation en C