J'ai tapé le code suivant et observé l'assembleur généré.
void _main(void)
{
int i;
char c;
i= 0;
c= -1;
(char)i= c;
printf(" * %i * ", i);
}
D'abord, je suis surpris que le compilateur accepte. Comment interprète-t-il "
(char)i= c" ? Je n'en comprends pas le sens.
D'ailleurs, concrètement, ça ne change rien avec ou sans le cast : le code ASM propage le bit de poids faible de c pour étendre sa valeur sur 16 bits, et il place le résultat dans i.