(2) le nombre d'octets qui est réservé pour une variable
Le tableau suivant résume les caractéristiques des types numériques entiers de C :
définition |
description |
domaine min |
domaine max |
nombre d'octets |
char |
caractère |
-128 |
127 |
1 |
short |
entier court |
-32768 |
32767 |
2 |
int |
entier standard |
-32768 |
32767 |
2 |
long |
entier long |
-2147483648 |
2147483647 |
4 |
- char : caractère
Une variable du type char peut contenir une valeur entre -128 et 127 et elle peut subir les mêmes opérations que les variables du type short, int ou long.
- int : entier standard
Sur chaque machine, le type int est le type de base pour les calculs avec les entiers. Le codage des variables du type int est donc dépendant de la machine. Sur les IBM-PC sous MS-DOS, une variable du type int est codée dans deux octets.
- short : entier court
Le type short est en général codé dans 2 octets. Comme une variable int occupe aussi 2 octets sur notre système, le type short devient seulement nécessaire, si on veut utiliser le même programme sur d'autres machines, sur lesquelles le type standard des entiers n'est pas forcément 2 octets.
- Les modificateurs signed/unsigned:
Si on ajoute le préfixe unsigned à la définition d'un type de variables entières, les domaines des variables sont déplacés comme suit:
définition |
description |
domaine min |
domaine max |
nombred'octets |
unsigned char |
caractère |
0 |
255 |
1 |
unsignedshort |
entier court |
0 |
65535 |
2 |
unsigned int |
entier standard |
0 |
65535 |
2 |
unsigned long |
entier long |
0 |
4294967295 |
4 |
Remarques
1. Le calcul avec des entiers définis comme unsigned correspond
à l'arithmétique modulo
2n. Ainsi, en utilisant une variable X du type
unsigned short, nous obtenons le résultat suivant:
Affectation : |
X = 65500 + 100 |
||
Résultat : |
X = 64 |
/* [+216] */ |
2. Par défaut, les types entiers short, int, long sont munis d'un signe. Le type par défaut de char est dépendant du compilateur et peut être signed ou unsigned. Ainsi, l'attribut signed a seulement un sens en liaison avec char et peut forcer la machine à utiliser la représentation des caractères avec signe (qui n'est cependant pas très usuelle).
3. Les valeurs limites des differents types sont indiquées dans le fichier header <limits.h>.
4. En principe, on peut dire que
sizeof(short) <= sizeof(int) <= sizeof(long)Ainsi sur certaine architecture on peut avoir
short = 2 octets, int = 2 octets, long = 4 octetset sur d'autre
short = 2 octets, int = 4 octets, long = 4 octets
( Il sera intéressant de voir l'implementation dans un environnement 64 bits! )