Du binaire au décimal.
- Donner l'écriture décimale de l'entier a = 101010deux.
- Donner l'écriture décimale de l'entier a = 100deux.
- Quels sont les entiers qui s'écrivent (en base 2) sous la forme d'un 1 suivi uniquement de chiffres 0 ?
Les exercices de cette feuille sont à traiter sans machine. Il s'agit de maîtriser le sens d'une écriture binaire.
Déterminer l'écriture binaire des entiers suivants (donnés par leur écriture en base dix) par des divisions en cascade.
quotient dans la division par 2 | reste dans la division par 2 | Division |
---|---|---|
8 | 1 | 17 = 2⨯ 8+ 1 |
4 | 0 | 8 = 2⨯ 4 +0 |
2 | 0 | 4 = 2⨯ 2+0 |
1 | 0 | 2 = 2⨯ 1+0 |
0 | 1 | 1 = 2⨯ 0 + 1 |
print( bin(17) )
0b10001
quotient dans la division par 2 | reste dans la division par 2 | Division |
12 | 1 | 25 = 2⨯ 12+ 1 |
6 | 0 | 12 = 2⨯ 6+ 0 |
3 | 0 | 6 = 2⨯ 3+ 0 |
1 | 1 | 3 = 2⨯ 1+ 1 |
0 | 1 | 1 = 2⨯ 0+ 1 |
print( bin(25) )
0b11001
Soit n un entier naturel. On lui applique l'algorithme des divisions en cascade avec la base 2.
Entrée : un entier n.
Traitement : a ← n
tant_que a est non nul :
r ← reste de la division de a par 2
a ← quotient de la division de a par 2
fin_tant_que
Sortie : les valeurs successives de r
Justifier que l'algorithme se terminera nécessairement, c'est à dire que l'on obtiendra nécessairement un quotient nul lors d'une étape de l'algorithme.
Lorsqu'on divise un entier non nul n par 2, on obtient un quotient strictement plus petit que n.
Si l'on note q0=n l'entier de départ, puis q1, q2, q3... les quotients successifs dans l'algorithme, on a donc q0>q1>q2>q3>...
Supposons qu'il n'y ait pas de quotient nul dans cette suite. Alors on peut continuer indéfiniment les divisions et on obtient une suite infinie d'entiers q0, q1, q2, q3... tous différents et tous compris entre 1 et n. Ceci est évidemment impossible : il n'existe pas une infinité d'entiers distincts entre 1 et n. L'algorithme aboutit donc nécessairement à un quotient nul lors d'une étape, ce qui prouve la terminaison de l'algorithme des divisions en cascade.
Remarques :
Sur un octet, on code les entiers de 0000 0000 à 1111 1111, c'est à dire de 0 à \( 2^0+2^1+2^2+\dots+2^7 = 2^8 -1 = 255\).
On code donc 256 entiers.
Sur n bits, on code 2n entiers : le plus petit étant 0, le plus grand étant \( \sum_{j=0}^{n-1} 2^j = 2^n -1\).