Les numériques entiers

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 :

TypeTaille minimalEtendueDescription
char1 octet-128 à 127Caractères
short int1 octets-128 à 127Entiers courts
int2 octets-32768 à 32767Entiers (simples)
long int4 octets-2147483648 à 2147483647Entiers 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) :

#define MAXSHORT 0x7F #define MAXINT 0x7FFF #define MAXLONG 0x7FFFFFFFL

Au fait, les notation short int et long int sont équivalentes aux short et long... le int est facultatif.

Valeurs signées et non signées

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 :

TypeTaille minimalEtendueDescription
unsigned char1 octet0 à 255Caractères non signés
unsigned int2 octets0 à 65535Entiers non signés
unsigned long4 octets0 à 4294967295Entiers 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.

Les notations numériques

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

Les valeurs logiques

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 :

0Une valeur nulle correspond à false (faux)
<> 0Une 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.

Les caractères

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 :
isalphaLettre majuscule ou minuscule (A à Z, a à z)
islowerLettre minuscule (a à z)
isupperLettre majuscule (A à Z)
isdigitChiffre (0 à 9)
isxdigitCaractère hexadécimal (0 à 9 , A à F, a à f)
isalnumLettre ou chiffre (A à Z, a à z, 0 à 9)
isasciiCaractère ASCII non étendu (0 à 127)
isprintCaractère imprimable (32 à 126)
isgraphCaractère imprimable (comme isprint) mais sans l'espace (32)
ispunctCaractère imprimable, sauf l'espace, une lettre ou un chiffre.
iscntrlCaractère de contrôle (\a, \b, \f, \n, \r, \t, \v).
isspaceEspace, 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 :
tolowerConverti la lettre minuscule (a à z)
toupperConverti la lettre majuscule (A à Z)



Dernière révision :
Date de Création : 18 mars 1998
Copyright ©
Mathieu ARNOLD 1998