1. Conversion base 10 vers base 2 (nombre fractionnaire)
On traite séparément la partie entière et la partie fractionnaire du nombre réel \(N\).
Méthode
- Convertir la partie entière comme un entier (divisions entières successives par 2).
- Pour la partie fractionnaire \(f\in[0, 1[\) :
- Calculer \(f \times 2\).
- Noter la partie entière (0 ou 1) : c’est le prochain bit.
- Remplacer \(f\) par sa partie fractionnaire et recommencer jusqu’à la précision voulue.
Exemple : \(3{,}47_{10}\) en base 2
Partie entière : \(3_{10}=11_2\).
Partie fractionnaire :
| Étape | Calcul | Partie entière | Nouvelle fraction |
|---|---|---|---|
| 1 | 0,47 × 2 = 0,94 | 0 | 0,94 |
| 2 | 0,94 × 2 = 1,88 | 1 | 0,88 |
| 3 | 0,88 × 2 = 1,76 | 1 | 0,76 |
| 4 | 0,76 × 2 = 1,52 | 1 | 0,52 |
| 5 | 0,52 × 2 = 1,04 | 1 | 0,04 |
| 6 | 0,04 × 2 = 0,08 | 0 | 0,08 |
Donc \(0,47_{10} \approx 0{,}011110_2\).
Conclusion : \(3{,}47_{10} \approx 11{,}01111_2\).
Remarque : Beaucoup de décimaux ont en binaire une écriture périodique et donc infinie.
Applications :
- Écrire en base 2 : \(7{,}125_{10}\) ; \(27{,}625_{10}\).
- Écrire en base 2 (≈) : \(23{,}103_{10}\) ; \(\tfrac13\).
- Écrire en base 16 : \(568{,}921_{10}\) (indiquer la partie fractionnaire en hexadécimal).
2. Conversion de base 2 vers base 10
Si \(N = d_n\cdots d_1 d_0 . d_{-1} d_{-2} \cdots d_{-m}\) en base 2, alors :
\(N = \sum_{i=0}^{n} d_i 2^i + \sum_{j=1}^{m} d_{-j} 2^{-j}\).
Applications :
- \(1110{,}0101_2\) vers base 10.
- \(1100101{,}1_2\) vers base 10.
- Effectuer en binaire \(0{,}1 + 0{,}2\), puis donner le résultat en base 10 (expliquer l’écart éventuel).
- \(0{,}12201_3\) vers base 10.
- \(0{,}3A2_{16}\) vers base 10.
3. Nombres flottants en machine (IEEE-754)
Un réel est représenté sous la forme normalisée \( \pm 1{,}M \times 2^{e} \) (le 1 avant la virgule est implicite en binaire normalisé).
Simple précision (32 bits)
- 1 bit de signe
- 8 bits d’exposant, biais (Coefficient de décalage) \(+127\)
- 23 bits de fraction (mantisse), sans le 1 caché
Exemple : \(-10{,}125_{10}\)
- \(10{,}125_{10} = 1010{,}001_2 = 1{,}010001 \times 2^3\)
- Signe = 1
- Exposant non biaisé \(e=3\) → exposant stocké \(E = e + 127 = 130 = 10000010_2\)
- Mantisse stockée = les bits après la virgule :
01000100000000000000000
Codage final : 1 10000010 01000100000000000000000
Applications :
- Donner le codage 32 bits de \(0{,}1\), \(0{,}2\), \(0{,}3\).
- Coder \(253{,}75\) et \(171{,}625\) en simple précision.
- Quel nombre est codé par
1 10000001 010000000000000000000000?
Double précision (64 bits)
- 1 bit de signe
- 11 bits d’exposant, biais \(+1023\)
- 52 bits de fraction
En Python, les float utilisent généralement le format IEEE-754 double précision.
Applications :
- Donner le codage 64 bits de \(0{,}3\).
- Question de cours : Quels réels ont une représentation exacte en binaire ? (indice : fractions de la forme \(k/2^n\)).