Bonjour tout le monde !

J'ai un GCC cross-compilé pour PowerPC entre les mains, et il me fait des manières .
Explication:

J'ai un petit bout de code qui ressemble à ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
int ma_val;
char my_diff;
ma_val = (my_diff < 0);
Et ce petit compilateur me répond gentillement:
Citation Envoyé par Petit gcc bien malin
warning: comparison is always false due to limited range of data type
Après une instant de réflexion, je décide de regarder le code généré, et je trouve:
En gros, lbz met à 0 les bits 0 à 23. Je perd mon info de signe, c'est la cata !
La solution simplissime consiste à transformer mon char en int, mais c'est hors de question.

Un cast ne suffit pas (ma_val = ((int)my_diff < 0)) : j'obtiens strictement la même chose.

Est-ce dû au compilateur ?
Merci d'avance !