Écriture en base 2

Écriture binaire

On peut se demander à juste titre si le nombre 10 du paragraphe précédent joue un rôle particulier: en réalité, il n’en est rien. Les humains comptent très vraissemblablement en base 10 pour une raison physiologique évidente (il suffit de compter le nombre de doigts sur les deux mains). Mais la base 20 est toute aussi naturelle (si on compte les doigts des mains et des pieds)

Les ordinateurs étant très fortement liés au bits comme nous l’avons vu un peu plus haut (c’est un peu comme si un ordinateur n’avait qu’un seul doigt pour compter), on peut naturellement se demander si le théorème mathématique précédent reste valable en base 2. Et c’est effectivement le cas !

La différence est que les chiffres seront bien évidemment des chiffres binaires, autrement dit des bits. L’autre différence est que l’on n’utilise plus des puissances de 10 mais plutôt des puissances de 2.

Exemple: Quel est le nombre dont la représentation en base 2 est 1101011 ?

Il est possible de généraliser l’exemple précédent: à toute suite de \(n + 1\) bits \(b_n, b_{n-1}, \ldots, b_2, b_1, b_0\) on peut associer un nombre entier de manière unique par la formule

\[N = b_n\times 2^n + b_{n-1}\times 2^{n-1} + \cdots + b_2\times 2^2 + b_1\times 2^1 + b_0\times 2^0\]

Regroupement en octets et en mots

Un octet étant un regroupement de 8 bits, il permet de représenter tout entier comportant au plus 8 chiffres binaires. Le plus grand entier que l’on peut ainsi représenter par un octet est

\begin{align*} 11111111_2 & = 2^7 + 2^6 + \cdots + 2^1 + 2^0 \\\
& = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 \\\
& = 255 \end{align*}

La plus petite valeur étant 0, il est donc possible de représenter 256 valeurs (entre 0 et 255) à l’aide d’un octet.

Remarque: L’indice 2 dans \(11111111_2\) permet de ne pas confondre un nombre dont la représentation est en binaire d’un nombre décimal. On peut utiliser \(135_{10}\) lorsque l’on veut préciser que la représentation est décimale, mais il est plus simple de convenir qu’en l’absence d’information sur la base, un nombre est décimal.

Notons aussi que l'égalité précédente n’a de sens que si l’on considère le membre de gauche comme une représentation binaire d’un nombre.

Nous verrons un peu plus loin que python a une autre manière de distinguer entre les nombres binaires et les nombres décimaux.


Exercice 1: Expliquer cette blague de programmeur: « Il y a 10 catégories de personnes: celles qui savent compter en binaire et celles qui ne savent pas…»


Exercice 2: Donner la représentation décimale des entiers dont les représentations binaires sont 11001100, 10101010 et 1010010011110010.


Exercice 3: Quelle est le plus grand entier que l’on puisse représenter sur 16 bits ? Sur 32 bits ? Sur 64 bits ?


Le théorème cité plus haut sur l’unicité de la représentation décimal d’un entier naturel est aussi valable pour la représentation binaire: un entier naturel \(N\) admet une unique représentation en base 2: il existe donc une seule séquence de bits permettant de représenter \(N\) dans cette base.

Exemple: Considérons l’entier naturel 94 (représentation décimale puisqu’il n’y a aucune indication du contraire). Quelle est sa représentation binaire ?

Il suffit de décomposer 94 en somme de puissances de 2, en n’utilisant qu’une seule fois (au plus) chaque puissance. Le théorème précédent nous garantit que cela est non seulement toujours possible, mais qu’il n’y a qu’une et une seule manière de le réaliser.

Un moyen algorithmique simple de trouver cette décomposition est de partir de la plus grande puissance de 2 inférieure ou égale à 94 (c’est donc 64) et de procéder ensuite par soustractions successives.

  • Comme \(64 < 94\), on calcule \(94 - 64 = 30\);
  • La plus grande puissance de 2 inférieure ou égale à 30 est 16. On calcule alors \(30 - 16 = 14\);
  • On a ensuite \(14 - 8 = 6\);
  • Puis \(6 - 4 = 2\);
  • Et enfin \(2 - 2 = 0\).

On vient donc de déterminer que \(94 = 64 + 16 + 8 + 4 + 2\), ce qui donne la représentation binaire 1011110.


Exercice 4: Donner la représentation en base 2 sur 8 bits des entiers 13, 135, 62 et 248.