Bonjour,
Je voudrais savoir comment au niveau binaire une comparaison entre signed et unsigned s'effectue ?
exemple :
unsigned char uc; char sc;
Je lis que l'égalité ci-dessus ne sera jamais vraie et je ne vois pas comment ça fonctionne au niveau binaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (uc==EOF) {....}
Je sais qu'un nombre négatif est stocké sous la forme de son complément à deux : par exemple sur un octet, -5 sera stocké comme 1111 1011.
Donc EOF (-1/int) sur un octet - pour simplifier - donne : 1111 1111.
uc qui est convertit en int, reçoit donc : 1111 1111
Ce sont bien ces deux valeurs qui sont comparées et je ne vois pas comment le compilateur voit la différence; car si c'était un (signed) char qui recevait le EOF, le motif binaire serait identique ( et là pourtant ça marche alors qu'avec l'unsigned char, le compilo me dit - à juste titre - que la comparaison sera toujours fausse etc....
Donc au fond comment fait-il la différence ? y-a t'il encore une autre conversion derrière ?
J'ai parcouru qq pdf d'architecture mais je ne comprends pas en fait, et toute aide serait grandement appréciée !
merci d'avance
Partager