Les constantes décimales doivent être exclusivement constituées des chiffres 0 à 9, le premier ne devant jamais être le chiffre 0.
Les constantes octales doivent être exclusivement constituées des chiffres 0 à 7, le premier étant obligatoirement le chiffre 0.
Les constantes hexadécimales doivent être exclusivement constituées des chiffres 0 à 9, des lettres A à F ou a à f, et obligatoirement précédés des deux premiers caractères 0x ou 0X.
Exemples :
// Affichages :
cout << "033 = " << 033 << endl; // 033 = 27 cout << "0x33 = " << 0x33 << endl; // 0x33 = 51 cout << "0xFF = " << 0xFF << endl; // 0xFF = 255 cout << "0xFFFF = " << 0xFFFF << endl; // 0xFFFF = 65535 |
Les constantes octales sont principalement utilisées pour exprimer les droits associés aux fichiers sous Unix. Ceux-ci sont en effet constitués de trois groupes de trois bits chacun, représentant dans cet ordre les droits (ou permissions) du propriétaire (user), du groupe (group) et des autres (others). Pour chacun, les permissions concernent dans cet ordre la lecture (read), l'écriture (write) et l'exécution (execution). Un ensemble de permissions attachées à un fichier est donc une constante entière octale de 3 chiffres précédée de 0 (voir par exemple le cours système : Protection des fichiers).
Les constantes hexadécimales servent généralement à exprimer :
#define VTATTR_BOLD
0x40000000
#define VTATTR_UNDERLINE 0x20000000 #define VTATTR_BLINK 0x10000000 #define VTATTR_REVERSE 0x08000000 |
qui représentent des attributs d'une zone d'affichage à l'écran, et qui peuvent être combinées entre elles :
VTATTR_UNDERLINE | VTATTR_BLINK |
représente une zone clignotante et soulignée;
#define __WCOREFLAG 0x80 |
Dans la macro __WCOREFLAG, seul le bit de rang 7 est positionné à 1. Sa représentation interne est 0...0 10000000 quel que soit le nombre d'octets occupés par un int. Ce masque est utilisé sous Unix pour savoir s'il existe une image mémoire (un fichier dit core) d'un processus terminé par réception d'un signal;
#define WM_LBUTTONDOWN 0x0201 |
La macro WM_LBUTTONDOWN, dont la représentation interne est 00000010 0000001 correspond à la valeur du message reçu par Windows chaque fois que le bouton gauche de la souris est enfoncé.
Dans tous les autres cas (arithmétique, indexation, etc.), les constantes utilisées sont les constantes décimales.
Remarque : Il n'existe pas de constante négative. En effet, les constantes -12 ou -0xFF sont les constantes 12 ou 0xFF auxquelles est appliqué l'opérateur unaire -. C'est pourquoi le signe - peut être suivi de n'importe quel nombre d'espaces (ou tabulations, ou retour chariot) : - 0xFF est valide.
void Fct (unsigned long Param = 0UL); |
//
codage en binaire
13u // unsigned 0000 1101 255u // unsigned 1111 1111 256u // unsigned long 0000 0001 0000 0000 0xFFu // unsigned 1111 1111 |
//
codage en binaire
13L // long 0000 0000 0000 1101 255L // long 0000 0000 1111 1111 32768L // unsigned long 1000 0000 0000 0000 0xFFFFL // unsigned long 1111 1111 1111 1111 |
Les deux dernières constantes sont considérées comme non signées car, dans le cas contraire, le bit le plus à droite serait un bit de signe positionné, donc le nombre serait négatif, ce qui ne correspond pas à la valeur affichée.
//
codage en binaire
13 // int 0000 1101 255 // long 0000 0000 1111 1111 256 // long 0000 0001 0000 0000 61440 // Comportement indéfini |
la constante 61440 ne peut pas être considérée comme un long int car le bit de plus fort poids serait positionné alors qu'elle est positive.
//
codage en binaire
015 // int 0000 1101 0xff // unsigned int 1111 1111 0400 // long 0000 0001 0000 0000 0xF000 // unsigned long 1111 0000 0000 0000 |
Comme précédemment, les constantes 0xff et 0xF000 sont considérées comme non signées, le bit de plus fort poids étant positionné alors que la constante est positive.