Truc en c s'il vous plaaait

Résolu
DevGl Messages postés 136 Date d'inscription   Statut Membre Dernière intervention   -  
DevGl Messages postés 136 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je suis entrain de programmer en c , et un petit truc qui est assez simple m'a vrement cassé la tete , et je voulais vous demander de m'aider ,
par exemple j'ai l'instruction suivant :

char a=0xAA;
printf("R1 =%d R2=%d\n", 0xAA, a);

personelement j'ai cru que résultat soit : R1 = -86 R2 = -86
mais quand j'ai essayé ca en devc++ , Résultat etait ; R1=170 R2=-86
mais ou est le probleme dans ca ??? a=0xAA , donc a est 0XAA sont les meme !! pour quoi cette difference la :/ ?????

1 réponse

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,
0xAA vaut 170. Donc si tu affiches 0xAA tu auras 170.
En revanche, si tu stockes 0xAA dans un char signé, cela risque de poser problème car le nombre maximum est dépassé (en supposant qu'il soit stocké sur 8 bits).
Explication :
0xAA = 10101010 en binaire.
On suppose que ton char est sur 8 bits.
char a=0xaa = 1 0101010 (le premier chiffre sert pour déterminer le signe) car il s'agit d'un char signé (par opposition à unsigned char).
Il faut utiliser le complément à 2 (et rajouter 1) pour déterminer le nombre négatif.
0101010 en complément à 2 vaut : 1010101 (on inverse les 0 et 1).
Si on rajoute 1, ça donne : 1010110 ce qui donne : 86.
Ce qui fait -86.

Cdlt,
0
DevGl Messages postés 136 Date d'inscription   Statut Membre Dernière intervention  
 
ouui je sais que a = 0XAA c 'est a dire a = -86 , mais comment t'as trouvé que 0XAA = 170 ???? c'est ce ce que je n'ai pas compris Fiddy !!
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
0xAA, c'est de l'hexadécimal.
Cela vaut en décimal : 0*16+10 = 170.
0
DevGl Messages postés 136 Date d'inscription   Statut Membre Dernière intervention  
 
ouui ouuuuuuuuuui , saye j'ai compris , merci beaucoup Fiddyyyyyyyy !!
0