Coder des données
Avant de programmer ou d'analyser un objet connecté, il faut comprendre comment il représente les informations.
Une montre connectée, un capteur de température ou un GPS ne manipulent pas directement des nombres comme 23 ou 45.
Ils utilisent uniquement deux états électriques :
- courant → 1
- pas de courant → 0
Toute information est donc codée en binaire.
Tout au long de ce cours, on va se demander comment votre téléphone affiche une couleur précise, comme l'orange.
Une couleur est définie par trois valeurs : Rouge, Vert, Bleu (système RVB).
Par exemple : Rouge = 255, Vert = 128, Bleu = 0 → donne un orange.
Ces trois nombres doivent être stockés et transmis par des circuits électroniques… qui ne connaissent que les 0 et les 1. Comment font-ils ?
Le système décimal (base 10)
C'est le système que nous utilisons tous les jours.
On dispose des chiffres de 0 à 9, et chaque position correspond à une puissance de 10.
Exemple :
273 = 2 × 100 + 7 × 10 + 3 × 1
273 = 2 × 10² + 7 × 10¹ + 3 × 10⁰
Chaque chiffre dépend de sa position.
Le système binaire (base 2)
Les ordinateurs utilisent uniquement : 0 et 1, chaque chiffre s'appelle un bit.
Quand on compte en binaire, 1 est la plus grande des valeurs, comme l'est 9 en décimal. Ainsi, quand on passe au nombre suivant, on remet le bit le plus à droite à 0, et on rajoute une colonne à gauche avec la valeur 1 :
| Décimal | Binaire |
|---|---|
| 0 | 0 |
| 1 | 1 |
| 2 | 10 |
| 3 | 11 |
| 4 | 100 |
| 5 | 101 |
| 6 | 110 |
| 7 | 111 |
Pour le chiffre 2 en décimal, on observe qu'en binaire on a la valeur 10.
- Un bit ne peut avoir que 2 valeurs possibles : 0 ou 1.
- Avec 2 bits, on peut avoir 4 valeurs possibles : 00, 01, 10, 11.
- Avec 3 bits, on peut avoir 8 valeurs possibles : 000, 001, 010, 011, 100, 101, 110, 111.
- Avec
nbits, on peut avoir 2ⁿ valeurs possibles.
Pourquoi ? Chaque bit a 2 choix (0 ou 1), et les choix se multiplient : 2 × 2 × … × 2 = 2ⁿ.
Un octet = 8 bits, il permet de coder : 2⁸ = 256 valeurs (de 0 à 255).
Il est très utilisé dans les objets connectés pour coder :
- une température (ex : 23°C → stocké sur 1 octet)
- une luminosité
- un niveau de batterie
Conversion décimal → binaire
Méthode 1 : divisions par 2
On divise notre nombre par 2 successivement, et on note les restes à chaque étape.
Exemple avec 13 :
13 ÷ 2 = 6, reste 1
6 ÷ 2 = 3, reste 0
3 ÷ 2 = 1, reste 1
1 ÷ 2 = 0, reste 1
On lit les restes de bas en haut : 13 = 1101₂
Méthode 2 : tableau des puissances de 2
On utilise un tableau recensant les puissances de 2, de droite à gauche. On cherche la plus grande puissance inférieure ou égale à notre nombre, on met un 1, on soustrait, et on continue jusqu'à atteindre 0. Les cases restantes reçoivent un 0.
Exemple avec 29 :
| 2⁷ | 2⁶ | 2⁵ | 2⁴ | 2³ | 2² | 2¹ | 2⁰ |
|---|---|---|---|---|---|---|---|
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 |
Détail du raisonnement :
- 29 ≥ 16 → on met 1, il reste 29 − 16 = 13
- 13 ≥ 8 → on met 1, il reste 13 − 8 = 5
- 5 ≥ 4 → on met 1, il reste 5 − 4 = 1
- 1 < 2 → on met 0 pour 2¹
- 1 ≥ 1 → on met 1, il reste 0
Résultat : 29 = 00011101₂
Conversion binaire → décimal
Chaque bit correspond à une puissance de 2, en partant de la droite (rang 0). On multiplie chaque bit par sa puissance et on additionne.
Exemple :
11001₂ = 1×2⁴ + 1×2³ + 0×2² + 0×2¹ + 1×2⁰
= 16 + 8 + 0 + 0 + 1
= 25
Le bit le plus à droite vaut toujours 2⁰ = 1. Le rang commence à 0, pas à 1.
Le système hexadécimal (base 16)
Comparons ces trois façons d'écrire la même information :
| Représentation | Valeur |
|---|---|
| Binaire | 11111111 10000000 00000000 |
| Décimal | 255, 128, 0 |
| Hexadécimal | FF 80 00 |
L'hexadécimal est beaucoup plus compact et lisible que le binaire, tout en restant directement lié aux bits. C'est pourquoi il est utilisé partout en informatique.
Il utilise 16 symboles :
| Décimal | Hexa | Binaire |
|---|---|---|
| 0 | 0 | 0000 |
| 1 | 1 | 0001 |
| 2 | 2 | 0010 |
| 3 | 3 | 0011 |
| 4 | 4 | 0100 |
| 5 | 5 | 0101 |
| 6 | 6 | 0110 |
| 7 | 7 | 0111 |
| 8 | 8 | 1000 |
| 9 | 9 | 1001 |
| 10 | A | 1010 |
| 11 | B | 1011 |
| 12 | C | 1100 |
| 13 | D | 1101 |
| 14 | E | 1110 |
| 15 | F | 1111 |
1 chiffre hexadécimal = 4 bits
1 octet = 2 chiffres hexadécimaux
Conversion binaire → hexadécimal
- On regroupe les bits par 4 en partant de la droite (on complète avec des 0 à gauche si nécessaire)
- On convertit chaque groupe de 4 bits en un chiffre hexadécimal
Exemple :
Valeur binaire : 10101100
Groupes de 4 bits : 1010 | 1100
Conversion :
1010 → A
1100 → C
Résultat : 10101100₂ = AC₁₆
Conversion hexadécimal → binaire
On convertit chaque chiffre hexadécimal en 4 bits et on les concatène.
Exemple :
Valeur hexadécimale : 3F
Conversion de chaque chiffre sur 4 bits :
3 → 0011
F → 1111
Résultat : 00111111
Résultat : 3F₁₆ = 00111111₂
Conversion décimal → hexadécimal
On peut passer par le binaire (méthode vue plus haut), ou diviser directement par 16.
Exemple avec 255 :
255 ÷ 16 = 15, reste 15 → F
15 ÷ 16 = 0, reste 15 → F
On lit les restes de bas en haut : 255 = FF₁₆
255 = FF, c'est la valeur maximale d'un octet — vous la verrez souvent dans les couleurs !
Bilan : la couleur de votre écran expliquée
Revenons à notre fil rouge. Votre téléphone veut afficher de l'orange vif.
Pour de l'orange vif, il faudrait que les pixels à l'écran aient tous besoin de mélanger du rouge et un peu de vert (synthèse additive). Il faudrait que chaque composante d'un pixel soit allumée avec ces valeurs :
- Rouge : 255
- Vert : 128
- Bleu : 0
En convertissant en binaire, cela donnerait : 11111111 10000000 00000000 ; ce n'est pas très lisible. Pour coder des couleurs, il faudrait plutôt passer par l'hexadécimal :
| Composante | Décimal | Binaire | Hexadécimal |
|---|---|---|---|
| Rouge | 255 | 11111111 | FF |
| Vert | 128 | 10000000 | 80 |
| Bleu | 0 | 00000000 | 00 |
La couleur s'écrit #FF8000 en hexadécimal — c'est exactement ce que vous voyez dans un sélecteur de couleur CSS par exemple.
L'hexadécimal est partout autour de vous :