Le calcul numérique simple ne requérant pas de décimales et ne dépassant pas de valeurs trop importantes s'effectue a l'aide de variables dont le type appartient au groupe des entier. Cette catégorie numérique comprends quatre variantes, présentées ici :
Type | Taille minimal | Etendue | Description |
char | 1 octet | -128 à 127 | Caractères |
short int | 1 octets | -128 à 127 | Entiers courts |
int | 2 octets | -32768 à 32767 | Entiers (simples) |
long int | 4 octets | -2147483648 à 2147483647 | Entiers longs |
La taille minimale de données, indiquée dans la seconde colonne du tableau précise le nombre d'octets nécessaire et suffisant pour stocker cette unité en mémoire, et dépends donc des caractéristiques de la machine sur laquelle tourne le compilateur. Les valeurs présentés ici correspondent aux systèmes 16 bits. A titre indicatif, une valeur int est codée sur 4 octets sur les systèmes 32 bits. L'importance est de savoir que la définition du langage C garantit que cet ensemble de types (char, short, int, long) forme une série croissante dans laquelle chacun des formats possède une taille de stockage supérieure ou égale au type précédent dans la série.
Les bornes minimales et maximales acceptées par les types sont définies sous forme de constantes symboliques dans les fichiers d'en-tête limits.h et values.h. Les trois déclarations de l'exemple suivant définissent (en notation hexadécimale la valeur max d'un entier court (128), d'un entier simple (32767) et d'un entier long (2147483647) :
Au fait, les notation short int
et long int
sont équivalentes aux short
et long
... le int
est facultatif.
La norme ANSI permet de distinguer a l'aide des mots clés signed
et unsigned
les types numériques signés et non signés. C'est à dire reconnaissant ou non les valeurs négatives.
Le mot clé unsigned précédant un qualificateur de type permet d'indiquer que les variables ainsi définies doivent contenir des valeurs non signées;, c'est a dire uniquement nulles ou positives. Un nombre entier unsigned est, du point de vue du stockage, un nombre dans lequel on en réserve pas de bit pour y stocker le signe, ce qui explique que l'on puisse stocker des valeurs stockées absolues puissent être supérieures à celles des entiers signées. Les étendues des entiers non signés sur machines a mots de 16 bits sont :
Type | Taille minimal | Etendue | Description |
unsigned char | 1 octet | 0 à 255 | Caractères non signés |
unsigned int | 2 octets | 0 à 65535 | Entiers non signés |
unsigned long | 4 octets | 0 à 4294967295 | Entiers longs non signés |
Inversement signed indique que les valeurs stockées dans les variables ainsi définies sont signées, c'est-à-dire négatives, nulles ou positives. Les compilateurs vous permettent en général de sélectionner une option pour savoir si les caractères (char) doivent être signés ou non par défaut. Sans indications contraires, les caractères sont signés. En d'autre termes char c
équivaut à signed char c
.
L'usage veut également que les entiers soient signés par défaut. C'est d'ailleurs pourquoi certaines extensions du C utilisent un type supplémentaire word, défini comme un unsigned int, permettant de stocker systématiquement des valeurs négatives dans des variables int.
Un nombre entier s'écrit sous forme d'une suite de chiffre arabes, sans espaces, ni caractères intermédiaires. Les valeurs négatives sont précédées du signe -
. L'utilisation du signe +
pour les valeurs positives est facultative.
Il est aussi possible d'écrire les nombres en base 8 (octal) ou 16 (hexadécimal). Les règles de notations sont les suivantes :
Décimal (base 10) | Nombre entier qui ne commence pas par 0 (zéro) |
Octal (base 8) | Nombre entier qui commence par un 0 (zéro) et qui est suivi d'au moins un chiffre |
Hexadécimal (base 16) | Nombre entier qui commence par un 0 (zéro) suivi d'un x (ou un X) et d'au moins un chiffre |
Le langage C ne dispose pas d'un type prédéfini pour les valeurs logiques tel le type boolean du Pascal. On utilise pour cela des entiers selon la convention suivante :
0 | Une valeur nulle correspond à false (faux) |
<> 0 | Une valeur non nulle correspond à true (vrai) par exemple 1 ... |
Les valeurs numériques entières s'utilisent donc dans tous les contextes qui doivent évaluer une expression conditionnelle à vrai ou faux, notamment des les boucles et branchements.
Le type char qualifie un type de données scalaires correspondant à l'ensemble des codes de caractères disponibles sur un ordinateur. Les données de type char doivent être notés entre deux ' (apostrophes). ex char c = 'f'
.
Les caractères sont des entiers puisqu'ils sont associes a leur code, c'est a dire leur position dans la table de caractères (le plus souvent ASCII). Les opérateurs de comparaison présentes pour les entiers s'utilisent aussi pour des caractères. Dans ce cas, c'est le code du caractère qui est prit en compte comme référence d'indexation. C'est pourquoi par exemple 'A' < 'a'
est vrai lorsque le compilateur utilise le code ASCII. De même, 'x' > 0
est toujours vrai. On ne sera donc pas surprit d'additionner ou de soustraire des caractères. Ainsi, dans la représentation ASCII, on peut passer des majuscules aux minuscules en ajoutant 32.
Le fichier d'en-tête ctype.h propose une série de macros/fonctions qui permettent d'analyser certaines caractéristiques et de classifier le caractère qui leur est passé en argument. Toutes ces macros acceptent en argument un code de caractère ( 0 à 255 ) ou EOF (-1) (End Of File : fin de fichier). Voici la liste complète de ces macros :
Fonction | Description : |
isalpha | Lettre majuscule ou minuscule (A à Z, a à z) |
islower | Lettre minuscule (a à z) |
isupper | Lettre majuscule (A à Z) |
isdigit | Chiffre (0 à 9) |
isxdigit | Caractère hexadécimal (0 à 9 , A à F, a à f) |
isalnum | Lettre ou chiffre (A à Z, a à z, 0 à 9) |
isascii | Caractère ASCII non étendu (0 à 127) |
isprint | Caractère imprimable (32 à 126) |
isgraph | Caractère imprimable (comme isprint) mais sans l'espace (32) |
ispunct | Caractère imprimable, sauf l'espace, une lettre ou un chiffre. |
iscntrl | Caractère de contrôle (\a , \b , \f , \n , \r , \t , \v ). |
isspace | Espace, tabulation horizontale ou verticale, retour chariot, saut de ligne ou de page. |
Ces macros indique, en retournant une valeur nulle ou non nulle, si le code caractère est bien dans la catégorie testée, par exemple, pour la première isalpha(c) retournera 0 si c n'est pas une lettre, et <>0 si c est une lettre.
Le fichier ctype.h contient aussi le prototype de deux fonctions qui permettent respectivement de convertir un caractère en majuscules, ou en minuscules :
Fonction | Description : |
tolower | Converti la lettre minuscule (a à z) |
toupper | Converti la lettre majuscule (A à Z) |
Dernière révision :
Date de Création : 18 mars 1998
Copyright © Mathieu ARNOLD 1998