Fiche à trous · Première · NSI
Représentation des données — Binaire et hexadécimal
Complétez de mémoire, puis vérifiez avec la page de corrigé.
Additionnez 0,1 et 0,2 dans n'importe quel langage : le résultat n'est pas 0,3. Ce n'est ni un bug ni une imprécision de la machine, c'est une conséquence directe de la base 2. Comprendre pourquoi évite l'une des erreurs les plus tenaces de la programmation débutante.
Compter en base 2
Définition — Binaire :
2Exemple
Combien de valeurs différentes un octet peut-il représenter ?
- 3.
- 4.
- 5.
Résultat :
Définition — Hexadécimal :
8Les entiers négatifs
Règle
10Cette plage explique les débordements : ajouter 1 à la plus grande valeur représentable ne donne pas la valeur suivante mais la plus petite, le compteur repartant à l'autre extrémité. Un programme qui ne vérifie pas ses bornes produit alors un résultat parfaitement déterministe et parfaitement faux — c'est l'origine de nombreux incidents célèbres.
Coder les caractères
Propriété
D'où une conséquence pratique constante : la longueur en caractères d'une chaîne et sa taille en octets ne coïncident pas. Compter l'un pour l'autre produit des chaînes tronquées au milieu d'un caractère, et c'est l'origine des caractères illisibles qu'on voit encore apparaître dans certains logiciels.
Les nombres à virgule
Règle
Piège
Tester l'égalité de deux nombres flottants avec un opérateur d'égalité stricte, et s'étonner que la somme de 0,1 et 0,2 ne vaille pas 0,3.
Sur des flottants, comparer un écart à un seuil, jamais deux valeurs.
Convertir un nombre entre bases
- 13.
- 14.
- 15.
- 16.
- 17.
- Ai-je vérifié la base de départ avant de convertir ?
- Mes puissances de 2 sont-elles comptées de droite à gauche à partir de 0 ?
- Pour passer du binaire à l'hexadécimal, ai-je regroupé par quatre bits ?
- En complément à 2, ai-je donné au bit de poids fort une valeur négative ?
- Ai-je distingué longueur en caractères et taille en octets en UTF-8 ?
- Ai-je comparé mes flottants à une tolérance près ?