L'écriture binaire des entiers

Écriture binaire d'un entier.

En langage python, on obtient l'écriture binaire d'un entier avec la fonction bin.

Exemples :


def imprimeEcritbin(n) :
	""" imprime l'écriture binaire de l'entier n
	donné en entrée en écriture décimale."""
	print(" L'écriture binaire python de l'entier {} est {}.".format(n, bin(n)))
	print(" L'écriture binaire 'mathématique' de l'entier {} est {}.".format(n, bin(n)[2:]))
	print()
	
for j in range(16) :
	imprimeEcritbin(j)

Réponse de python :

 L'écriture binaire python de l'entier 0 est 0b0.
 L'écriture binaire 'mathématique' de l'entier 0 est 0.

 L'écriture binaire python de l'entier 1 est 0b1.
 L'écriture binaire 'mathématique' de l'entier 1 est 1.

 L'écriture binaire python de l'entier 2 est 0b10.
 L'écriture binaire 'mathématique' de l'entier 2 est 10.

 L'écriture binaire python de l'entier 3 est 0b11.
 L'écriture binaire 'mathématique' de l'entier 3 est 11.

 L'écriture binaire python de l'entier 4 est 0b100.
 L'écriture binaire 'mathématique' de l'entier 4 est 100.

 L'écriture binaire python de l'entier 5 est 0b101.
 L'écriture binaire 'mathématique' de l'entier 5 est 101.

 L'écriture binaire python de l'entier 6 est 0b110.
 L'écriture binaire 'mathématique' de l'entier 6 est 110.

 L'écriture binaire python de l'entier 7 est 0b111.
 L'écriture binaire 'mathématique' de l'entier 7 est 111.

 L'écriture binaire python de l'entier 8 est 0b1000.
 L'écriture binaire 'mathématique' de l'entier 8 est 1000.

 L'écriture binaire python de l'entier 9 est 0b1001.
 L'écriture binaire 'mathématique' de l'entier 9 est 1001.

 L'écriture binaire python de l'entier 10 est 0b1010.
 L'écriture binaire 'mathématique' de l'entier 10 est 1010.

 L'écriture binaire python de l'entier 11 est 0b1011.
 L'écriture binaire 'mathématique' de l'entier 11 est 1011.

 L'écriture binaire python de l'entier 12 est 0b1100.
 L'écriture binaire 'mathématique' de l'entier 12 est 1100.

 L'écriture binaire python de l'entier 13 est 0b1101.
 L'écriture binaire 'mathématique' de l'entier 13 est 1101.

 L'écriture binaire python de l'entier 14 est 0b1110.
 L'écriture binaire 'mathématique' de l'entier 14 est 1110.

 L'écriture binaire python de l'entier 15 est 0b1111.
 L'écriture binaire 'mathématique' de l'entier 15 est 1111.
 

L'écriture binaire d'un entier est constituée des seuls chiffres 0 et 1. En python, cette écriture est préfixée par '0b'.

Que signifient les 0 et les 1 d'une écriture binaire ?

Vous savez interpréter l'écriture décimale (ou écriture en base 10) d'un entier : il s'agit de l'image de 10 par un polynôme à coefficients entiers tous compris entre 0 et 9.

Exemple : 8753= 8 \( \times \) 103 + 7\( \times \)102 + 5 \( \times \) 101 +3\( \times \)100.

De façon générale, si le chiffre des unités (en écriture décimale) d'un entier n est b0, le chiffre des dizaines b1, le chiffre des centaines b2 ..., on peut écrire n=b0\( \times \)100+b1\( \times \)101+b2\( \times \)102+... où chacun des bi est un chiffre entre 0 et 9.

L'interprétation d'une écriture binaire (ou écriture en base 2) est similaire, mais les chiffres bi sont 0 ou 1 et il s'agit de puissances de 2 au lieu des puissances de 10. On calculera donc l'image de 2 par un polynôme à coefficients entiers tous égaux à 0 ou à 1.

Exemple : 0b1101= 1\( \times \)23+1\( \times \)22+0\( \times \)21+1\( \times \)20. On a donc 0b1101 = 13.

Vérifions cela avec python :


print( int(0b1101) )

Ou plus simplement :


print(  0b1101  )

Réponse de python :

13

Notations.

Si nous écrivons 1101, nous ne pouvons pas savoir a priori s'il s'agit d'une écriture binaire ou décimale. Pour distinguer ces situations, nous conviendrons que sans indication l'écriture est une écriture en base 10. Pour l'écriture binaire, nous utiliserons la notation python (préfixe '0b') ou l'indication de la base 2 en indice : 1101deux.
Il pourra arriver que, pour clarifier, la base 10 soit aussi parfois explicitée comme dans l'écriture : 1101deux= 13dix.

Passer de la base 2 à la base 10.

L'exemple précédent a montré comment passer d'une écriture binaire à une écriture décimale. Exercez-vous.

Du décimal au binaire

Un théorème.

Tout entier naturel possède une écriture binaire, et une seule.

Les chiffres en décimal

Rappelons comment on obtient les chiffres, un à un, d'une écriture décimale sur un exemple.

Exemple : 8753.
8753 = 875\( \times \)10 +3. 3 (chiffre des unités) est donc le reste dans la division euclidienne de 8753 par 10, et 875 (nombre de dizaines) en est le quotient.
Nous pouvons réitérer la remarque sur 875 : 875 = 87\( \times \)10 +5.
5 (chiffre des dizaines) est donc le reste de la division euclidienne de 875 par 10 et 87 (nombre de centaines) en est le reste.
On recommence avec 87. 87 = 8 \( \times \)10 +7.
7 (chiffre des centaines) est donc le reste de la division euclidienne de 87 par 10 et 8 (nombre des milliers) en est le reste.
On termine avec 8 : 8 = 0 \( \times \)10 +8.
8 (chiffre des milliers) est le reste de la division euclidienne de 8 par 10. Et le quotient (nombre des dizaines de milliers) est 0.
Ayant obtenu ce 0, nous pouvons stopper la démarche.

Nous avons ainsi explicité un algorithme (appelé algorithme des divisions en cascade) prenant en entrée un entier et donnant en sortie la liste des chiffres de l'écriture décimale (en commençant par le chiffre des unités) de cet entier :


Entrée     : un entier n.
Traitement : a ← n
             tant_que a est non nul :
                     r ← reste de la division de a par 10
                     a ← quotient de la division de a par 10
             fin_tant_que
Sortie     : les valeurs successives de r

Le même algorithme dans lequel nous remplaçons 10 par 2 donne les chiffres de l'écriture binaire de n.


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

Exemple : obtenir les chiffres de l'écriture binaire de 13.

a=13 et a=2*6+1. Le bit de rang 0 (bit de poids \( 2^0 \) ) est donc 1.
a=6. a=2*3+0. Le bit de rang 1 (bit de poids \( 2^1 \) ) est 0.
a=3. a=2*1+1. Le bit de rang 2 (bit de poids \( 2^2 \) ) est 1.
a=1. a=2*0+1. Le chiffre de rang 3 (bit de poids \( 2^3 \) ) est 1.
a=0. On a terminé.
L'écriture binaire de 13 est donc 1101deux.

On peut poser cette série de calculs de la façon suivante (qui explique pourquoi l'algorithme précédent est appelé algorithme des divisions en cascade) :
divisions en cascade
Les chiffres bleus sont les valeurs de a successives dans le déroulement de l'algorithme (la valeur 0 marque l'arrêt de l'algorithme). Les chiffres verts sont les restes successifs, celui du haut étant celui qui sera à droite dans l'écriture binaire, celui du bas sera le plus à gauche dans l'écriture binaire.

Chiffre de poids faible, chiffre de poids fort

Dans l'écriture en base b=10 ou en base b=2, on appelle poids d'un chiffre la puissance de b correspondante.

Exemple. 8753= 8\( \times \) 103 + 7\( \times \)102 + 5 \( \times \) 101 +3\( \times \)100 : le poids de 3 est 100, le poids de 5 est 101, le poids de 7 est 102 et le poids de 8 est 103. Le chiffre 3 (chiffre des unités du nombre 8753) est appelé chiffre de poids le plus faible (ou même souvent chiffre de poids faible) . Le chiffre 8 est le chiffre de poids le plus fort (souvent appelé chiffre de poids fort).

De même dans 1101deux, le 1 écrit à gauche est le chiffre (on dira plutôt le bit en base deux) de poids le plus fort (ici de poids 23) ou MSB (most significant bit), et le 1 de droite est le bit de poids le plus faible (de poids 20) ou LSB (lowest significant bit).

On fera attention au fait que l'algorithme présenté ci-dessus donne les chiffres dans l'ordre croissant des poids (poids le plus faible en premier, poids le plus fort en dernier) alors que l'on écrit ensuite le nombre de gauche à droite en commençant par écrire les chiffres de poids forts.

Passer de la base 10 à la base 2.

L'exemple précédent a montré comment passer d'une écriture décimale à une écriture binaire. Exercez-vous.