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

BaseChiffresExempleUsage en informatique
10 (décimal)0-9166Humains
2 (binaire)0, 11010 0110Machine, masques réseau
16 (hexadécimal)0-9, A-FA6Adresses MAC, IPv6, couleurs #A6FF00, mémoire
DécBinHexDécBinHex
000000810008
100011910019
200102101010A
300113111011B
401004121100C
501015131101D
601106141110E
701117151111F

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.
ValeurCalculBinaire
−1256 − 1 = 2551111 1111
−122441111 0100
−581981100 0110
−971591001 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

ObjetBaseExemple
IPv4décimal pointé, calculs en binaire255.255.255.192 = 11111111.11111111.11111111.11000000
MAChexa, 48 bits3C:52:82:1A:9F:04
IPv6hexa, 128 bits2001:db8::1
Droits Linuxoctal (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 a

En Python directement : bin(46), hex(166), int("D4A", 16), int("101110", 2), format(-58 & 0xFF, "08b").

Voir aussi