M02 - Numération : binaire, hexadécimal, complément à 2, ASCII
Objectif
Convertir entre bases 10, 2 et 16 sans calculatrice, coder des nombres négatifs (complément à 2) et à virgule, additionner en binaire, comprendre l’ASCII et le bit de parité. Indispensable pour les adresses IP, MAC et IPv6.
1. Les trois bases
| Base | Chiffres | Exemple | Usage en informatique |
|---|---|---|---|
| 10 (décimal) | 0-9 | 166 | Humains |
| 2 (binaire) | 0, 1 | 1010 0110 | Machine, masques réseau |
| 16 (hexadécimal) | 0-9, A-F | A6 | Adresses MAC, IPv6, couleurs #A6FF00, mémoire |
| Déc | Bin | Hex | Déc | Bin | Hex | |
|---|---|---|---|---|---|---|
| 0 | 0000 | 0 | 8 | 1000 | 8 | |
| 1 | 0001 | 1 | 9 | 1001 | 9 | |
| 2 | 0010 | 2 | 10 | 1010 | A | |
| 3 | 0011 | 3 | 11 | 1011 | B | |
| 4 | 0100 | 4 | 12 | 1100 | C | |
| 5 | 0101 | 5 | 13 | 1101 | D | |
| 6 | 0110 | 6 | 14 | 1110 | E | |
| 7 | 0111 | 7 | 15 | 1111 | F |
Puissances de 2 : .
2. Conversions
flowchart LR D["Décimal"] -->|"divisions successives par 2<br/>(restes lus de bas en haut)<br/>ou soustraire les puissances de 2"| B["Binaire"] B -->|"somme des puissances de 2<br/>des bits à 1"| D B -->|"groupes de 4 bits<br/>depuis la droite"| H["Hexadécimal"] H -->|"chaque chiffre → 4 bits"| B H -->|"Σ chiffre × 16^rang"| D
Décimal → binaire (46) : ; ; ; ; ; → lecture de bas en haut : 101110.
Binaire → décimal : .
Binaire ↔ hexa : ; .
Hexa → décimal : .
3. Nombres négatifs : complément à 2 (sur 8 bits)
- Le bit de gauche indique le signe (1 = négatif).
- Plage signée sur 8 bits : −128 à +127 (non signée : 0 à 255).
- Méthode : pour coder , on code en binaire.
| Valeur | Calcul | Binaire |
|---|---|---|
| −1 | 256 − 1 = 255 | 1111 1111 |
| −12 | 244 | 1111 0100 |
| −58 | 198 | 1100 0110 |
| −97 | 159 | 1001 1111 |
Autre méthode : écrire en binaire, inverser tous les bits, ajouter 1. (58 = 0011 1010 → 1100 0101 → +1 = 1100 0110 ✓)
4. Virgule fixe (4 bits entiers + 4 bits de fraction)
Poids après la virgule : ; ; ; . · .
5. Addition binaire
Règles : ; ; (0, retenue 1) ; (1, retenue 1).
0110 1101 (109)
+ 0011 0101 ( 53)
-----------
1010 0010 (162) ✓
On additionne colonne par colonne de droite à gauche, en reportant la retenue sur la colonne suivante. Multiplier par 2 = décaler d’un rang vers la gauche (ajouter un 0 à droite).
6. ASCII et bit de parité
- ASCII : 128 caractères sur 7 bits.
A= 65,Z= 90,a= 97,z= 122,0= 48, espace = 32. - Parité paire : on ajoute un 8e bit pour que le nombre total de 1 soit pair → détecte une erreur de transmission d’un bit.
a= 97 = 110 0001 (3 bits à 1, impair) → bit de parité 1 → octet 1110 0001.- Aujourd’hui : UTF-8 (Unicode) code tous les caractères du monde ; les 128 premiers sont identiques à l’ASCII.
7. Lien avec le réseau
| Objet | Base | Exemple |
|---|---|---|
| IPv4 | décimal pointé, calculs en binaire | 255.255.255.192 = 11111111.11111111.11111111.11000000 |
| MAC | hexa, 48 bits | 3C:52:82:1A:9F:04 |
| IPv6 | hexa, 128 bits | 2001:db8::1 |
| Droits Linux | octal (base 8) | chmod 755 = 111 101 101 |
8. Script : scripts/maths/conversions.py
python3 conversions.py dec 46 # divisions successives + hexa
python3 conversions.py bin 10100110
python3 conversions.py hex D4A
python3 conversions.py signe -58 # complément à 2
python3 conversions.py virgule 13.75
python3 conversions.py parite aEn Python directement : bin(46), hex(166), int("D4A", 16), int("101110", 2), format(-58 & 0xFF, "08b").