# ISN Types de données
## Types de données

| Savoirs : | nombre entier ; virgule flottante ; booléen ; caractère ; tableau ; chaîne de caractères. |
| Capacités : | Choisir un type de donnée en fonction d'un problème à résoudre. |
| Observation : | On adapte la présentation de ces notions en fonction du langage de programmation retenu. |

## Pourquoi typer des données

Dans un ordinateur, tout est représenté par des uns et des zéros. Alors, pourquoi vouloir distinguer des types de données ?
Pour l'essentiel, c'est une question de codage !
Prenons l'exemple du nombre $01000001_{\mbox{bin}}$, il pourrait représenter :

### un entier court,

    le nombre décimal 65, codé sur un seul octet ;

### un réglage particulier d'options (tableau booléen),

    supposons 8 options de personnalisation d'une automobile vraies ou fausses, par exemple :
| toit ouvrant | freinage assisté | GPS intégré | lecteur multimedia MP3 | jantes larges | couleur métallisée | système de détection de collision | assistance au créneau |
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |

### un caractère ASCII,

    ici, c'est le « A » ;
Pour des données plus longues, il existe de nombreuses autres interprétations possibles. Décider quel codage s'applique, c'est typer la donnée.

## Bien connaître les types de données

Si on ignore les types de données, des bugs étranges et incompréhensibles peuvent se produire.

### Le type entier

Selon les ordinateurs et les systèmes utilisés, un entier peut être codé sur une longueur fixe :

#### 1 octet (8 bits)

    il est dans l'intervalle [0, 255] (entier non signé), ou dans l'intervalle [-128, 127] (entier signé)

#### 2 octets (16 bits)

    il est dans l'intervalle [0, 65535] (entier non signé), ou dans l'intervalle [-32768, 32767] (entier signé)
Exercice
Quelles sont les limites qui concernent la représentation d'un entier sur 64 bits ?
Des bibliothèques de programmes existent pour faire du calcul en précision arbitraire. Dans ce cas, un entier peut être représenté par un nombre variable d'octets, selon les besoins.

### Le type virgule flottante

Un ordinateur n'utilise que des zéros et et des uns. Même si vous utilisez plusieurs giga-octets pour représenter un nombre tel que $\pi$ ou ${\sqrt {2}}$, la représentation sera toujours fausse.
On représente donc les nombres « réels » par une suite limitée de chiffre binaires. Un type à virgule flottante contient quelques bits pour donner l'ordre de grandeur (un exposant positif ou négatif pour faire une puissance de deux), et un nombre entier qui est multiplié par cette puissance de deux.
Extrait de l'article Virgule flottante de Wikipedia
| | Encodage | Signe | Exposant | Mantisse | Valeur d'un nombre | Précision | Chiffres significatifs |
| Simple précision | 32 bits | 1 bit | 8 bits | 23 bits | $(-1)^{S}\times M\times 2^{(E-127)}$ | 24 bits | environ 7 |
| Double précision | 64 bits | 1 bit | 11 bits | 52 bits | $(-1)^{S}\times M\times 2^{(E-1023)}$ | 53 bits | environ 16 |

### Le type booléen

Il s'agit d'un type de donnée qui ne peut avoir que deux valeurs différentes : vrai/faux ou 1/0.
La plupart des ordinateurs n'ont de mécanismes simples que pour accéder à des octets ; alors, il arrive que les valeurs vrai/faux soient encodées par les octets 11111111 et 00000000. Ce n'est pas un problème pour des systèmes riches en mémoire. Pour des micro-systèmes disposant d'une mémoire très limitée, il peut être bon de considérer des méthodes d'empaquetage de plusieurs booléens dans un seul octet, pour économiser une ressource précieuse.

### Le type caractère

Le tableau suivant résument l'encodage de caractères non accentués, du code ASCII (début de l'UNICODE). Il a été adapté d'une page de Wikipedia.
Pour connaître le code d'un caractère, prendre le chiffre hexadécimal en début de ligne, puis le chiffre hexadécimal en tête de colonne. Par exemple, 0041 est le code hexadécimal du caractère « A »
Évidemment, ce ne sont pas les seuls caractères qu'on ait à encoder dans le monde.

### Le type tableau

Le type tableau se présente le plus souvent dans la mémoire de l'ordinateur comme une succession de données du même type (entiers, ou flottants, etc...), les unes à la suite des autres.
La particularité du tableau c'est qu'on doit pouvoir accéder à une des « cases » de ce tableau en donnant sont « index » : un seul numéro (tableaux à une dimension), ou plusieurs (tableaux à plusieurs dimensions).

### Le type chaîne de caractères

Une chaîne de caractères, ça peut être implémenté comme un tableau de caractères.
Dans certains cas, cependant, on préfère réserver une code particulier qui signifie « fin de la chaîne de caractères ». Par exemple, en langage C, le premier octet nul marque la fin de la chaîne de caractères.
Une autre méthode (utilisée par certains langages Pascal), consiste à coder tout au début de la chaîne un entier qui représente la longueur de la chaîne de caractères.
Exercice
* Trouver au moins un inconvénient de la méthode du caractère terminal (pensez à ce qui se passe si à la suite d'un bug, ce caractère disparaît);
* Trouver au moins un inconvénient de la méthode de longueur encodée en début de chaîne.