UKOnline

Donnée

Un programme manipule donc des données. Par exemple, le nom ou le prénom d'une personne, sa date de naissance ou encore son adresse. On peut aussi penser à des données plus complexes telles que toutes les grilles horaires des trains, ou l'arbre généalogique d'une famille. De manière générale, toute donnée possède un type qui caractérise cette donnée.

Dans ce chapitre, on va commencer par analyser des données simples comme par exemple le poids d'un sachet de chips. De manière générale, il s'agit d'un nombre entier positif donné en grammes, par exemple 350g. On va voir trois types de donnée dans ce chapitre : les nombres entiers, les nombres flottants, et les caractères.

Les données sont au final stockées dans la mémoire de l'ordinateur, et occupent une certaine quantité de mémoire. Chaque type de donnée est notamment caractérisé par l'espace mémoire utilité pour stocker une donnée de ce type. Puisque l'espace mémoire réservé pour un type de donnée est fixe, cela signifie que lorsqu'on choisit un type de donnée, on ne pourra pas stocker tout ce que l'on veut, mais uniquement certaines données.

Prenons un exemple pour comprendre cela. Supposons que l'on travaille avec un type de donnée qui est limité à un bit en mémoire. Avec un bit, on ne peut stocker que deux valeurs différentes : 0 et 1. Avec ce type de données, on ne pourra donc stocker que deux données différentes en tout. Pour les différents types décrit dans ce chapitre, un point important sera donc l'espace mémoire qu'ils utilisent. Comme on va le voir, cet espace mémoire dépend notamment de la machine utilisée. Dans ce livre, les exemples montrés sont exécutés sur une machine 64 bits avec un processeur Intel Core i7.

Nombre entier

Le premier type de données permet de représenter des nombres entiers. On utilise par exemple ce type de données pour stocker l'âge d'une personne, le nombre d'habitants d'un pays, le nombre d'élèves dans une classe, le code postal d'une ville... Il existe en C quatre types pour les nombres entiers, à savoir short, int, long int et long long. La différence entre ces quatre types concerne le nombre de valeurs différentes qu'il est possible de représenter.

La figure 1 reprend les quatre types avec les bornes minimales et maximales des valeurs représentables. On remarque par exemple que les types long int et long long sont identiques sur cette machine. On verra plus loin dans ce livre comment obtenir ces valeurs pour votre propre machine.

Type Valeur minimale Valeur maximale
short -32 768 32 767
int -2 147 483 648 2 147 483 647
long int -9 223 372 036 854 775 808 9 223 372 036 854 775 807
long long -9 223 372 036 854 775 808 9 223 372 036 854 775 807
Valeurs minimales et maximales pour les différents types de données permettant de représenter des nombres entiers signés.

Les quatre types de données que l'on vient de voir sont appelés des types signés, c'est-à-dire qu'ils permettent de représenter des valeurs avec un signe (positif ou négatif). On n'a pas toujours besoin de cette possibilité car on est parfois limité aux seuls nombres positifs. C'est par exemple le cas si l'on souhaite stocker un âge ou un nombre d'élèves dans une classe. Il est possible en C de signaler qu'on se limite aux valeurs positives. Les quatre types existent en fait en version signed (avec signe) et unsigned (sans signe). Lorsqu'on ne dit rien, c'est par défaut qu'on utilise la version signed.

L'avantage d'utiliser les versions unsigned est qu'il est alors possible de stocker plus de valeurs différentes possibles pour les quatre types de données comme on peut le voir sur la figure 2.

Type Valeur minimale Valeur maximale
unsigned short 0 65 535
unsigned int 0 4 294 967 295
unsigned long int 0 18 446 744 073 709 551 616
unsigned long long 0 18 446 744 073 709 551 616
Valeurs minimales et maximales pour les différents types de données permettant de représenter des nombres entiers non-signés.

La figure 3 reprend l'espace mémoire occupé par les quatre types de données. Cet espace mémoire occupé est le même pour les versions signed et unsigned des quatre types de données et on verra plus loin dans le livre comment obtenir ces tailles pour votre propre machine.

Type Espace mémoire
unsigned short 2 octets
unsigned int 4 octets
unsigned long int 8 octets
unsigned long long 8 octets
Espace mémoire occupé pour les différents types de données permettant de représenter des nombres entiers.

Nombre flottant

On peut aussi vouloir représenter des nombres à virgule. On utilise par exemple ce type pour stocker le poids d'une personne en kilogrammes, la distance entre deux villes, le prix d'un article en euros, la consommation d'essence d'une voiture en litres aux 100 kilomètres... Il existe pour cela trois types en C, à savoir float, double et long double.

De manière précise, on parle de nombre flottant car tous les nombres à virgule ne peuvent en fait pas être représentés comme on le verra au chapitre suivant. De plus, contrairement aux nombres entiers, tous les types pour les nombres flottants sont d'office signés. La figure 4 reprend les trois types avec les bornes minimales et maximales des valeurs représentables, et avec l'espace mémoire occupé.

Type Espace mémoire Valeur minimale Valeur maximale
float 4 octets 1,2.10-38 3,4.1038
double 8 octets 2,2.10-308 1,7.10308
long double 16 octets 3,4.10-4932 1,2.104932
Espace mémoire occupé et valeurs minimales et maximales pour les différents types de données permettant de représenter des nombres flottants.

Caractère

Enfin, terminons avec le dernier type de données élémentaire qui permet de représenter des caractères. On va par exemple utiliser ce type pour stocker le sexe d'une personne (M ou F), la taille d'un paquet de frites (S, M ou L), ou tout simplement une lettre de l'alphabet... Il n'y a qu'un seul type en C, à savoir char.

Comme détaillé au chapitre suivant, tout caractère est en fait associé à un nombre entier positif. Cette association est faite grâce à une table de caractères. En fait, un caractère peut être vu comme un nombre entier signé.

Le type char occupe un seul octet en mémoire et permet donc de représenter les nombres de 0 à 127 (à savoir 128 caractères différents). Lorsqu'on doit écrire une donnée de type caractère, on doit écrire le caractère en question entre guillemets simples (apostrophe). On écrira donc par exemple 's' ou 'C'.