Truc en c s'il vous plaaait

Résolu/Fermé
DevGl Messages postés 136 Date d'inscription samedi 23 novembre 2013 Statut Membre Dernière intervention 16 mai 2015 - Modifié par DevGl le 23/04/2014 à 19:47
DevGl Messages postés 136 Date d'inscription samedi 23 novembre 2013 Statut Membre Dernière intervention 16 mai 2015 - 23 avril 2014 à 22:18
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 :/ ?????
A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
23 avril 2014 à 20:31
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 samedi 23 novembre 2013 Statut Membre Dernière intervention 16 mai 2015
23 avril 2014 à 21:52
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 23/04/2014 à 21:57
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 samedi 23 novembre 2013 Statut Membre Dernière intervention 16 mai 2015
23 avril 2014 à 22:18
ouui ouuuuuuuuuui , saye j'ai compris , merci beaucoup Fiddyyyyyyyy !!
0