Que se passe-t-il lorsque vous atsortingbuez un int à un caractère en C? Est-ce qu’il ignore toujours les bits supplémentaires à gauche?
Exemple (4 octets int):
unsigned char c = 0; unsigned int i = 500; c = i; // c is 244 c = i <> 24; //c is 244 i = i <> 24; //i is 244
En binary, 500
correspond à 111110100
et 244
correspond à 11110100
.
En règle générale, c’est exactement ce qui se passe. La section 6.3.1.3 de la norme ISO / IEC 9899: 2011 prescrit ce qui doit se passer dans ce cas:
6.3.1.3 Entiers signés et non signés
60) Les règles décrivent l’arithmétique sur la valeur mathématique, pas la valeur d’un type d’expression donné.
Votre cas tombe sous le point 2 ci-dessus (puisque votre personnage est déclaré non signé). Dans une arithmétique informatique typique, le résultat sera exactement tel que décrit.