Chapitre 214 minDébutant
Conversions entre décimal, binaire et hexadécimal
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- convertir un entier du décimal vers le binaire ou l'hexadécimal, et inversement ;
- passer du binaire à l'hexadécimal par paquets de 4 bits ;
- écrire une adresse IPv4 ou un masque en binaire ;
- lire une adresse MAC ou une couleur écrite en hexadécimal.
5 exercices corrigés2 schémas
Convertir un nombre d'une base à une autre, c'est changer son écriture sans changer sa valeur : (156)₁₀ = (10011100)₂ = (9C)₁₆. Ce chapitre donne une méthode sûre pour chacun des six sens de conversion entre les bases 10, 2 et 16, avec des exemples détaillés, la façon de vérifier ton résultat, et les usages en réseau et en développement : adresses IP, adresses MAC, couleurs.
Vue d'ensemble des méthodes
| De → vers | Méthode | Exemple |
|---|---|---|
| Base 2 ou 16 → base 10 | Somme des chiffres × poids | (9C)₁₆ = 9 × 16 + 12 = 156 |
| Base 10 → base 2 | Divisions successives par 2, ou soustraction des puissances de 2 | 156 → (10011100)₂ |
| Base 10 → base 16 | Divisions successives par 16 | 156 → (9C)₁₆ |
| Base 2 → base 16 | Paquets de 4 bits en partant de la droite | 1001 1100 → 9C |
| Base 16 → base 2 | Chaque chiffre donne 4 bits | 9C → 1001 1100 |
Du binaire ou de l'hexadécimal vers le décimal
C'est la définition même de la numération de position (chapitre 1) : tu multiplies chaque chiffre par son poids et tu additionnes.
Exemple 1. (1101001)₂ : les bits à 1 sont aux positions 6, 5, 3 et 0.
(1101001)₂ = 64 + 32 + 8 + 1 = 105.
Exemple 2. (7EA)₁₆ : E vaut 14, A vaut 10.
(7EA)₁₆ = 7 × 256 + 14 × 16 + 10 × 1 = 1 792 + 224 + 10 = 2 026.
La méthode de Horner, plus rapide pour les longs nombres : tu lis les chiffres de gauche à droite, et à chaque chiffre tu multiplies le résultat courant par la base avant d'ajouter le chiffre.
(7EA)₁₆ : 7
7 × 16 + 14 = 126
126 × 16 + 10 = 2026
Elle évite de calculer les puissances, et c'est exactement ce que fait un programme qui lit un nombre chiffre par chiffre (chapitre 11).
Du décimal vers le binaire : les divisions successives
Pour écrire un entier N en base 2 :
- divise N par 2 : note le quotient et le reste (0 ou 1) ;
- recommence avec le quotient, jusqu'à obtenir un quotient égal à 0 ;
- lis les restes de bas en haut : le dernier reste obtenu est le bit de poids fort.
Exemple : 156 en binaire.
En lisant les restes de bas en haut : 156 = (10011100)₂.
Vérification : 128 + 16 + 8 + 4 = 156. Prends l'habitude de vérifier chaque conversion dans l'autre sens : cela prend vingt secondes et rattrape la plupart des erreurs.
Pourquoi ça marche ? Chaque division par 2 est une division euclidienne : 156 = 2 × 78 + 0. Le reste dit si le nombre est pair ou impair, c'est-à-dire son bit de poids faible. Diviser par 2 décale ensuite tous les bits d'un rang vers la droite, et le reste suivant donne le bit suivant.
Du décimal vers le binaire : la soustraction des puissances de 2
Pour un nombre pas trop grand, cette méthode va plus vite et se fait de tête :
- cherche la plus grande puissance de 2 inférieure ou égale au nombre, et écris 1 à sa position ;
- retire-la, puis recommence avec le reste ;
- mets 0 aux positions des puissances que tu n'as pas utilisées.
Exemple : 156.
- La plus grande puissance de 2 qui tient dans 156 est 128 : 156 − 128 = 28.
- 64 et 32 ne tiennent pas dans 28 : 0 et 0.
- 16 tient : 28 − 16 = 12.
- 8 tient : 12 − 8 = 4.
- 4 tient : 4 − 4 = 0.
- 2 et 1 : 0 et 0.
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|
| 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
156 = (10011100)₂, comme avec les divisions.
C'est la méthode qu'utilisent les administrateurs réseau pour convertir un octet d'adresse IP : avec le tableau 128, 64, 32, 16, 8, 4, 2, 1 écrit en haut de la feuille, un octet se convertit en quelques secondes.
Du décimal vers l'hexadécimal
La méthode des divisions successives marche dans toutes les bases : il suffit de diviser par 16 au lieu de 2. Les restes vont alors de 0 à 15, et tu écris les restes de 10 à 15 avec les lettres A à F.
Exemple : 2 026 en hexadécimal.
| Division | Quotient | Reste | Chiffre |
|---|---|---|---|
| 2 026 ÷ 16 | 126 | 10 | A |
| 126 ÷ 16 | 7 | 14 | E |
| 7 ÷ 16 | 0 | 7 | 7 |
En lisant de bas en haut : 2 026 = (7EA)₁₆.
Pour faire la division euclidienne par 16 à la calculatrice : 2 026 ÷ 16 = 126,625. Le quotient est la partie entière, 126, et le reste vaut 2 026 − 16 × 126 = 2 026 − 2 016 = 10. Ne prends jamais la partie décimale (625) pour le reste. Sur certaines calculatrices, une touche ou une fonction donne directement quotient et reste ; en Python, divmod(2026, 16) renvoie (126, 10).
Autre méthode : passer par le binaire. 2 026 = 1 024 + 512 + 256 + 128 + 64 + 32 + 8 + 2, soit (11111101010)₂. Regroupé par 4 bits depuis la droite : 0111 1110 1010, soit 7, E, A. On retrouve (7EA)₁₆.
Binaire et hexadécimal par paquets de 4 bits
Comme 16 = 2⁴, chaque chiffre hexadécimal correspond à un paquet de 4 bits, et inversement. La conversion se fait sans aucun calcul sur le nombre entier.
Du binaire vers l'hexadécimal :
- découpe le nombre en paquets de 4 bits en partant de la droite ;
- complète le paquet de gauche avec des 0 si besoin ;
- remplace chaque paquet par son chiffre hexadécimal (tableau du chapitre 1).
(1011101011)₂ → 0010 1110 1011 → 2, E, B → (2EB)₁₆.
Vérification par le décimal : (2EB)₁₆ = 2 × 256 + 14 × 16 + 11 = 512 + 224 + 11 = 747, et (1011101011)₂ = 512 + 128 + 64 + 32 + 8 + 2 + 1 = 747. Les deux écritures représentent bien le même nombre.
De l'hexadécimal vers le binaire : remplace chaque chiffre par ses 4 bits, sans oublier les 0 de tête à l'intérieur du nombre.
(3B7)₁₆ → 3 = 0011, B = 1011, 7 = 0111 → (0011 1011 0111)₂, soit (1110110111)₂ sans les zéros de tête.
Écrire un nombre sur un nombre fixe de bits
En informatique, un nombre est presque toujours stocké sur un nombre fixe de bits : 8, 16, 32 ou 64. On complète alors à gauche avec des 0, qui ne changent pas la valeur.
- 10 sur 8 bits : 0000 1010.
- 1 sur 8 bits : 0000 0001.
- 156 sur 16 bits : 0000 0000 1001 1100, soit (009C)₁₆.
Un octet s'écrit toujours avec 8 bits et deux chiffres hexadécimaux : on écrit (0A)₁₆ et non (A)₁₆ dans une adresse MAC ou une couleur.
Application : une adresse IPv4 en binaire
Une adresse IPv4 est un nombre de 32 bits, écrit en notation décimale pointée : quatre octets en décimal, séparés par des points. Chaque octet se convertit séparément, sur 8 bits.
| Octet | 192 | 168 | 1 | 10 |
|---|---|---|---|---|
| Binaire | 11000000 | 10101000 | 00000001 | 00001010 |
192.168.1.10 = 11000000.10101000.00000001.00001010.
Le masque /24 s'écrit avec 24 bits à 1 suivis de 8 bits à 0 : 11111111.11111111.11111111.00000000, soit 255.255.255.0. Les valeurs possibles d'un octet de masque sont celles où les 1 sont tous à gauche :
| Bits à 1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|---|
| Octet binaire | 00000000 | 10000000 | 11000000 | 11100000 | 11110000 | 11111000 | 11111100 | 11111110 | 11111111 |
| Décimal | 0 | 128 | 192 | 224 | 240 | 248 | 252 | 254 | 255 |
Le calcul de l'adresse de réseau à partir de l'adresse et du masque utilise le ET logique bit à bit (chapitre 4). Le cours réseaux détaille le calcul du réseau, de la diffusion et du nombre d'hôtes.
Application : adresses MAC, IPv6 et couleurs
Adresse MAC. Une adresse MAC compte 48 bits, écrits en 6 octets hexadécimaux : 3C:52:82:1A:F0:7E. Les trois premiers octets identifient le fabricant de la carte réseau (OUI). Le dernier octet, (7E)₁₆, vaut 7 × 16 + 14 = 126, soit (01111110)₂.
Adresse IPv6. Une adresse IPv6 compte 128 bits, écrits en 8 groupes de 4 chiffres hexadécimaux (16 bits chacun) séparés par « : ». Le groupe 0db8 vaut (0000 1101 1011 1000)₂. Les zéros de tête d'un groupe peuvent être omis (db8), et une suite de groupes nuls peut être remplacée une fois par « :: ».
Couleur web. En CSS, #1E90FF désigne une couleur par ses trois composantes rouge, vert, bleu, chacune sur un octet :
| Composante | Hexadécimal | Calcul | Décimal |
|---|---|---|---|
| Rouge | 1E | 1 × 16 + 14 | 30 |
| Vert | 90 | 9 × 16 + 0 | 144 |
| Bleu | FF | 15 × 16 + 15 | 255 |
#1E90FF et rgb(30, 144, 255) désignent la même couleur. Avec 256 valeurs par composante, on obtient 256³ = 2²⁴ = 16 777 216 couleurs. Le cours HTML et CSS détaille les autres notations de couleurs.
Les conversions en Python
Python fait toutes ces conversions. Elles te servent à vérifier tes calculs, pas à les remplacer à l'écrit.
bin(156) # '0b10011100'
hex(2026) # '0x7ea'
int('10011100', 2) # 156
int('7EA', 16) # 2026
format(10, '08b') # '00001010' : 8 bits, complété par des 0
format(255, '02X') # 'FF' : 2 chiffres hexadécimaux en majuscules
Le chapitre 11 programme les mêmes conversions à la main, avec les divisions successives, comme un sujet peut te le demander.
Exercices
Exercice 1 sur 5 Décimal vers binaire Réussi À revoir
Convertis en binaire, par la méthode de ton choix, puis vérifie.
- 45
- 200
- 255
- 1 000
Voir la réponseMasquer la réponse de l'exercice 1
- 45 = 32 + 8 + 4 + 1 = (101101)₂.
- 200 = 128 + 64 + 8 = (11001000)₂.
- 255 = 256 − 1 : huit bits à 1, (11111111)₂.
- Divisions successives : 1 000 → 500 r 0 → 250 r 0 → 125 r 0 → 62 r 1 → 31 r 0 → 15 r 1 → 7 r 1 → 3 r 1 → 1 r 1 → 0 r 1. Restes lus de bas en haut : (1111101000)₂. Vérification : 512 + 256 + 128 + 64 + 32 + 8 = 1 000.
Tu avais trouvé ?
Exercice 2 sur 5 Décimal vers hexadécimal Réussi À revoir
Convertis en hexadécimal.
- 171
- 4 096
- 3 054
Voir la réponseMasquer la réponse de l'exercice 2
- 171 ÷ 16 = 10 reste 11 ; 10 ÷ 16 = 0 reste 10. Restes de bas en haut : A, B. 171 = (AB)₁₆. Vérification : 10 × 16 + 11 = 171.
- 4 096 = 16³ : (1000)₁₆.
- 3 054 ÷ 16 = 190 reste 14 (16 × 190 = 3 040) ; 190 ÷ 16 = 11 reste 14 ; 11 ÷ 16 = 0 reste 11. Restes de bas en haut : B, E, E. 3 054 = (BEE)₁₆. Vérification : 11 × 256 + 14 × 16 + 14 = 2 816 + 224 + 14 = 3 054.
Tu avais trouvé ?
Exercice 3 sur 5 Binaire et hexadécimal Réussi À revoir
- Convertis en hexadécimal : (11011110)₂, (101010111100)₂ et (1111100001)₂.
- Convertis en binaire : (5A)₁₆, (C0DE)₁₆ et (208)₁₆.
Voir la réponseMasquer la réponse de l'exercice 3
- Par paquets de 4 bits depuis la droite :
- 1101 1110 → (DE)₁₆ ;
- 1010 1011 1100 → (ABC)₁₆ ;
- 11 1110 0001 → 0011 1110 0001 → (3E1)₁₆.
- Chaque chiffre donne 4 bits :
- 5A → 0101 1010 ;
- C0DE → 1100 0000 1101 1110 ;
- 208 → 0010 0000 1000, soit (1000001000)₂ sans les zéros de tête. Attention au 0 du milieu, qui donne bien 0000.
Tu avais trouvé ?
Exercice 4 sur 5 Adresse IP et masque Réussi À revoir
Un poste a l'adresse 172.16.45.200 avec le masque 255.255.240.0.
- Écris l'adresse en binaire, octet par octet.
- Écris le masque en binaire. Combien de bits valent 1 ? Donne la notation CIDR.
- Écris le troisième octet de l'adresse (45) en hexadécimal.
Voir la réponseMasquer la réponse de l'exercice 4
-
172 = 128 + 32 + 8 + 4 → 10101100 ; 16 → 00010000 ; 45 = 32 + 8 + 4 + 1 → 00101101 ; 200 = 128 + 64 + 8 → 11001000.
10101100.00010000.00101101.11001000
-
255 → 11111111, 255 → 11111111, 240 → 11110000, 0 → 00000000. Il y a 8 + 8 + 4 = 20 bits à 1 : le masque est un /20.
-
45 = (0010 1101)₂ = (2D)₁₆. Vérification : 2 × 16 + 13 = 45.
Tu avais trouvé ?
Exercice 5 sur 5 Couleurs Réussi À revoir
- Donne les composantes décimales de la couleur
#FF8C00. - Écris en hexadécimal la couleur
rgb(46, 139, 87).
Voir la réponseMasquer la réponse de l'exercice 5
- FF = 255, 8C = 8 × 16 + 12 = 140, 00 = 0 : rgb(255, 140, 0), un orange.
- 46 = 2 × 16 + 14 → 2E ; 139 = 8 × 16 + 11 → 8B ; 87 = 5 × 16 + 7 → 57. La couleur est #2E8B57. Chaque composante s'écrit avec deux chiffres, même si le premier est 0.
Tu avais trouvé ?