Programmer en langage C
218
© Éditions Eyrolles
Par exemple :
014 correspond à la valeur décimale 12,
037 correspond à la valeur décimale 31.
La forme hexadécimale se note en faisant précéder le nombre écrit en hexadécimal (les dix
premiers chiffres se notent 0 à 9, A correspond à dix, B à onze,... F à quinze) des deux caractères 0x (ou 0X). Par exemple :
0x1A correspond à la valeur décimale 26 (16+10)
Les deux dernières notations doivent cependant être réservées aux situations dans lesquelles
on s’intéresse plus au motif binaire qu’à la valeur numérique de la constante en question.
D’ailleurs, tout se passe comme si l’on avait affaire, dans ce cas, à une valeur non signée et, là
encore, il sera préférable d’éviter tout mélange (dans une même expression) avec des valeurs
signées.
2 Compléments sur les types de caractères
2.1 Prise en compte d’un attribut de signe
A priori, le type char peut, lui aussi, recevoir un attribut de signe ; en outre, la norme ne dit
pas si char tout court correspond à unsigned char ou à signed char (alors que, par
défaut, tous les types entiers sont considérés comme signés).
L’attribut de signe d’une variable de type caractère n’a aucune incidence sur la manière dont
un caractère donné est représenté (codé) : il n’y a qu’un seul jeu de codes sur 8 bits, soit
256 combinaisons possibles en comptant le \0. En revanche, cet attribut va intervenir dès lors
qu’on s’intéresse à la valeur numérique associée au caractère et non plus au caractère luimême. C’est le cas, par exemple, dans des expressions telles que les suivantes (c étant supposé
de type caractère) :
c + 1
c++
printf ("%d", c) ;
Pour fixer les idées, supposons, ici encore, que les entiers de type int sont représentés sur
16 bits et voyons comment se déroule précisément la conversion char -> int en question.
Delannoy Livre.book Page 218 Mercredi, 6. mai 2009 4:26 16
218
© Éditions Eyrolles
Par exemple :
014 correspond à la valeur décimale 12,
037 correspond à la valeur décimale 31.
La forme hexadécimale se note en faisant précéder le nombre écrit en hexadécimal (les dix
premiers chiffres se notent 0 à 9, A correspond à dix, B à onze,... F à quinze) des deux caractères 0x (ou 0X). Par exemple :
0x1A correspond à la valeur décimale 26 (16+10)
Les deux dernières notations doivent cependant être réservées aux situations dans lesquelles
on s’intéresse plus au motif binaire qu’à la valeur numérique de la constante en question.
D’ailleurs, tout se passe comme si l’on avait affaire, dans ce cas, à une valeur non signée et, là
encore, il sera préférable d’éviter tout mélange (dans une même expression) avec des valeurs
signées.
2 Compléments sur les types de caractères
2.1 Prise en compte d’un attribut de signe
A priori, le type char peut, lui aussi, recevoir un attribut de signe ; en outre, la norme ne dit
pas si char tout court correspond à unsigned char ou à signed char (alors que, par
défaut, tous les types entiers sont considérés comme signés).
L’attribut de signe d’une variable de type caractère n’a aucune incidence sur la manière dont
un caractère donné est représenté (codé) : il n’y a qu’un seul jeu de codes sur 8 bits, soit
256 combinaisons possibles en comptant le \0. En revanche, cet attribut va intervenir dès lors
qu’on s’intéresse à la valeur numérique associée au caractère et non plus au caractère luimême. C’est le cas, par exemple, dans des expressions telles que les suivantes (c étant supposé
de type caractère) :
c + 1
c++
printf ("%d", c) ;
Pour fixer les idées, supposons, ici encore, que les entiers de type int sont représentés sur
16 bits et voyons comment se déroule précisément la conversion char -> int en question.
Delannoy Livre.book Page 218 Mercredi, 6. mai 2009 4:26 16
