ISN Types de données

Un livre de Wikilivres.

Types de données[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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 , 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[modifier | modifier le wikicode]

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

Le type entier[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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 ou , 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 24 bits environ 7
Double précision 64 bits 1 bit 11 bits 52 bits 53 bits environ 16

Le type booléen[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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.

0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
000
NUL
SOH
STX
ETX
EOT
ENQ
ACK
VT
FF
SO
SI
001
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
FS
GS
RS
US
002
003
004
005
006
007

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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.