Comment l’assignation de int à char fonctionne en C?

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

    1. Lorsqu’une valeur de type entier est convertie en un type entier autre que _Bool, si la valeur peut être représentée par le nouveau type, elle est inchangée.
    2. Sinon, si le nouveau type n’est pas signé, la valeur est convertie en ajoutant ou en soustrayant plusieurs fois la valeur maximale pouvant être représentée dans le nouveau type jusqu’à ce que la valeur se situe dans la plage du nouveau type. 60)
    3. Sinon, le nouveau type est signé et la valeur ne peut pas y être représentée. soit le résultat est défini par l’implémentation, soit un signal défini par l’implémentation est généré.

    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.