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 -
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 :/ ?????
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:
- Truc en c s'il vous plaaait
- Wap truc - Télécharger - Navigateurs
- Comment enlever le truc noir sur libreoffice - Forum LibreOffice / OpenOffice
- Truc d'alfred - Forum Loisirs / Divertissements
- Probleme curseur large qui supprime en tapant ✓ - Forum Windows
- Lignes noires ineffaçables dans document open office - Forum LibreOffice / OpenOffice
1 réponse
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,
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,
Cela vaut en décimal : 0*16+10 = 170.