Ceci est le code de test.gcc (v4.1.2 cross-compiler) problème de promotion d'entier
char ch = 0xff;
int i = ch;
printf("%d\n", i);
Dans gcc-4.4.5 i386, la sortie est -1. Mais dans powerpc-e300c3-linux-gnu-gcc-4.1.2 (compilateur croisé MPC8315), la sortie est 255.
Qu'est-ce qui ne va pas? Pourquoi la sortie gcc-4.1.2 est 255?
Merci pour votre réponse ...
J'ai aussi rencontré ce problème. 'char' est" habituellement "signé, mais sur PowerPC Linux, il est non signé. Quand j'ai découvert cela, je codais sur PowerPC, et j'avais ce code: 'unsigned char charflag [256]; ... charflag [c] & CF_WHITE'. Le problème est que lorsque 'c' est un caractère de la variété non-ASCII, il en résulte des index négatifs quand' char' est signé. Le correctif était de dire 'charflag [(unsigned char) c]', car cela empêche l'extension de signe parasite. –
Affecter la valeur de 255 à un caractère n'est pas une bonne idée: "Autrement, le nouveau type est signé et la valeur ne peut être représentée, le résultat est défini par l'implémentation ou un signal défini par l'implémentation est déclenché. " Vous pouvez seulement supposer que vous pouvez stocker des valeurs jusqu'à 127 dans un simple 'char'. En règle générale, n'utilisez jamais un 'char' simple pour l'arithmétique. –