Aller au contenu

Représentation des entiers naturels en base 2

Ce chapitre ne traîte que d'entiers naturels, que par la suite j'abrège en "entiers".

Les contraintes matérielles et technologiques font que les ordinateurs ne peuvent manipuler que deux valeurs : 0 et 1. Celà corresponds à deux états dans un transistor : du courant passe et pas de courant.

Les nombres en base 10

Les nombres que l'on manipulent tous les jours sont exprimés en base 10. Celà veut dire qu'ils utilisent 10 symboles, nos chiffres, dans leur représentation : \(0\), \(1\), \(2\), \(3\), \(4\), \(5\), \(6\), \(7\), \(8\) et \(9\).

Imaginons qu'on s'en serve pour compter des arbres. Si on a \(329\) arbres,

  • Le chiffre \(9\), les unités, représente 9 arbres.
  • Le chiffre \(2\), les dizaines, représente 20 arbres, soit 2 paquets de 10.
  • Le chiffre \(3\), les centaines, représente 300 arbres, soit 3 paquets de 100.

En fonction de la position du symbole (le chiffre) dans le nombre, il représente une quantité différente. On peut le résumer dans un tableau. Attention, la position est exprimée de droite à gauche à partir de 0 ! (donc \(9\) est en position 0 et \(3\) est en position 2)

Position Taille du paquet Chiffre Quantité
0 1 \(9\) 9
1 10 \(2\) 20
2 100 \(3\) 300

En fait, pour un chiffre en position \(p\), la taille du paquet est de \(10^{p}\). On rappelle que \(x^{0} = 1\), quelle que soit la valeur de \(x\).

On calcule la valeur représentée par le nombre en faisant l'addition de toutes ces quantités.

\[ \begin{align} 329 &= 9 \times 10^{0} + 2 \times 10^{1} + 3 \times 10^{2}\\ 4708 &= 8 \times 10^{0} + 0 \times 10^{1} + 7 \times 10^{2} + 4 \times 10^{3} \end {align} \]

La base 2

Pour représenter un nombre en base 2, c'est le même principe, mais avec 2 symboles : \(0\) et \(1\). Pour différencier les nombres en base 10 et les nombres en base 2, on écrira la base à l'indice. \(1011_{2}\) est en base 2 et vaut \(11_{10}\). Si on ne précise pas la base, alors le nombre est en base 10.

Continuons de compter des arbres. Si on a \(1011_{2}\) arbres, alors :

  • Le chiffre en position 0, les unités, représente 1 arbre.
  • Le chiffre en position 1, les "deuzaines"1, représente 2 arbres. C'est à dire 1 paquet de 2.
  • Le chiffre en position 2, les "quatraines"1, représente 0 arbres. C'est à dire 0 paquet de 4.
  • Le chiffre en position 3, les "huitaines"1, représente 8 arbres. C'est à dire 1 paquet de 8.

Exercice : valeur décimale d'un nombre en base 2

Calculez la valeur décimale de \(1011_{2}\)

Lisez bien la correction, elle fait partie du cours !

Reprenez le calcul pour \(4708\) et changez les \(10\) pour des \(2\).

\[ \begin{align} 1011_{2} &= 1 * 2^{0} + 1 * 2^{1} + 0 * 2^{2} + 0*2^{3}\\ & = 1 + 2 + 0 + 8\\ & = 11 \end{align} \]

Pour un chiffre en position \(p\), la taille du paquet en base 2 est donc de \(2^{p}\).

Voici les valeurs décimales de quelques puissances de 2:

Exposant Valeur exposant Valeur décimale
0 \(2^{0}\) 1
1 \(2^{1}\) 2
2 \(2^{2}\) 4
3 \(2^{3}\) 8
4 \(2^{4}\) 16
5 \(2^{5}\) 32
6 \(2^{6}\) 64
7 \(2^{7}\) 128
8 \(2^{8}\) 256
9 \(2^{9}\) 512
10 \(2^{10}\) 1 024
11 \(2^{11}\) 2 048
12 \(2^{12}\) 4 096
13 \(2^{13}\) 8 192
14 \(2^{14}\) 16 384
15 \(2^{15}\) 32 768
16 \(2^{16}\) 65 536
24 \(2^{24}\) 16 777 216
32 \(2^{32}\) 4 294 967 296
64 \(2^{64}\) 18 446 744 073 709 551 616
Remarque

Connaître les premières puissances de 2 (ou au moins avoir une idée de leur valeur) permet souvent de gagner du temps quand on fait de l'informatique, parce qu'on y a souvent affaire.

De ce fait, la plupart des informaticiens connaissent bien les puissances de 2. Personnellement, en écrivant ce tableau, je les connaissais jusqu'à \(2^{16}\), même si j'ai un peu hésité pour \(2^{15}\)

On a déjà vu comment transformer un nombre en base 2 en un nombre en base 10. Voyons comment passer un nombre en base 10 dans la base 2.

Conversions par soustractions

La première méthode est la plus simple et aussi la plus rapide si vous connaissez bien vos puissances de 2.

Soit m un nombre en base 10
On fait n = m
tant que n > 0:
    p = la plus grande puissance de 2 inférieure à n
    on écrit l'exposant de p quelque part
    n = n - p
On reconstruit m en base 2 en écrivant 1 aux positions 
    egales aux exposants trouvés et 0 ailleurs

Exemple : \(437_{10}\)

On cherche les exposants :

\(n\) \(p\) exposant \(n - p\) mémoire
437 256 8 181 8
181 128 7 53 8, 7
53 32 5 21 8, 7, 5
21 16 4 5 8, 7, 5, 4
5 4 2 1 8, 7, 5, 4, 2
1 1 0 0 8, 7, 5, 4, 2, 0
0 stop stop stop 8, 7, 5, 4, 2, 0

On reconstruit en base 2 :

Position876543210
Chiffre110110101

Donc \(437_{10} = 110110101_{2}\)

Exercice : base 10 vers base 2 par soustractions

Déterminez la représentation de \(171_{10}\) en base 2.

Executez l'algorithme à la main à l'aide de tableaux comme montré dans le cours.

Exposants :

\(n\) \(p\) exposant \(n - p\) mémoire
171 128 7 43 7
43 32 5 11 7, 5
11 8 3 3 7, 5, 3
3 2 1 1 7, 5, 3, 1
1 1 0 0 7, 5, 3, 1, 0

On reconstruit en base 2 :

Position76543210
Chiffre10101011

\(171_{10} = 10101011_{2}\)

Conversions par divisions

L'autre méthode de conversion est plus rapide si on n'est pas à l'aise avec les puissance de 2. Elle fait appel à des divisions euclidiennes successives.

Rappel : une division euclidienne est une division entre deux nombres entiers, qui produit un reste.

Par exemple, 11 divisé par 2 fait 5 et il reste 1. On dit que 11 est le dividende, 2 le diviseur, 5 le quotient et 1 le reste.

Notre méthode est donc la suivante :

Soit m un nombre en base 10
n = m 
tant que n > 0: 
    On divise n par 2, et on note le reste
    n = quotient
On reconstitue le nombre en base 2 en lisant
les restes en sens inverse.

Exemple avec \(437_{10}\)

\(n\) quotient reste
437 218 1
218 109 0
109 54 1
54 27 0
27 13 1
13 6 1
6 3 0
3 1 1
1 0 1
0 stop stop

Donc \(437_{10} = 110110101_{2}\)

Exercice : base 10 vers base 2 par divisions

Utilisez la méthode des divisions pour trouver la représentation en base 2 de \(171_{10}\).

Vous pouvez vous aider d'un tableau comme celui montré dans le cours.

\(n\) quotient reste
171 85 1
85 42 1
42 21 0
21 10 1
10 5 0
5 2 1
2 1 0
1 0 1
0 stop stop

\(171_{10} = 10101011_{2}\)

Un peu de vocabulaire

Un chiffre dans un nombre codé en base 2 est un bit. \(1011_2\) est donc sur 4 bits. Son symbole est un b minuscule.

Un groupe de 8 bits s'appelle un octet. \(11001011_2\) est un octet. Son symbole est un o minuscule.

La plus petite unité adressable dans un ordinateur (qu'on peut stocker et accéder en une fois dans la mémoire) est un byte (se prononce bayte). Un byte n'est pas forcément de taille de 8 bits, mais l'usage moderne réfère généralement à un byte comme étant une unité composée de 8 bits2. Son symbole est un B majuscule.

Remarque

Il existe deux grandes manière de représenter de grande quantités d'octets (ou de bits). La première utilise les préfixes du système international3 (kilo-, méga-, ...). La seconde utilise des préfixes binaires4 (kibi-, mébi-, ...). Comparons les.

Préfixes SI
Préfixes binaires
Différence binaire / SI
unité notation nombre d'octets unité notation nombre d'octets pourcentage
Kilooctet ko 103 Kibioctet Kio 210 2%
Mégaoctet Mo 106 Mébioctet Mio 220 5%
Gigaoctet Go 109 Gibioctet Gio 230 7%
Téraoctet To 1012 Tébioctet Tio 240 10%

Il faut parfois faire attention à celà, un disque dur avec 1To de capacité aura 10% de capacité de moins qu'un disque dur de 1 Tio !

Dans une donnée binaire, pour la position, on parle souvent de poids. Les bits de poids fort sont ceux avec une position élevée (le plus à gauche), alors que ceux les plus a droite sont les bits de poids faible.

L'essentiel

Au programme

Un nombre peut être représenté dans différentes bases, en fonction du nombre de valeurs différentes que peut avoir un chiffre. Notre système usel est la base 10, utilisant des chiffres de 0 a 9.

Les ordinateurs manipulent des nombres en base 2, représentés avec uniquement des 0 et des 1.

Le passage de la base 2 à la base 10 se fait en additionnant chaque chiffre du nombre multiplié par la valeur de son paquet :

\[ \begin{align} 11001_2 &= 1 \times 2^4 + 1 \times 2^3 + 0 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 \\ &= 16 + 8 + 0 + 0 + 1\\ &= 25 \end{align} \]

Pour passer de la base 10 à la base 2, il y a deux méthodes : par soustractions successives et par divisions successives. Il vous faut en connaître au moins une des deux. Voir cours pour les détails de chaque méthode.

Dans un ordinateur, les chiffres de la base 2, donc 0 et 1, sont appelés bits. Les bits sont généralement groupés par 8 (octet), 16, 32 ou 64. Par exemple, 25 sur 8 bits se code \(00011001_2\).

La valeur maximale d'un entier naturel que l'on peut représenter sur \(n\) bits est \(2^n - 1\). Par exemple, sur 8 bits la valeur maximale est 255.


  1. Ces trois noms ont étés inventés. Evitez de les utiliser dans une copie d'examen. Toutes mes félicitations pour avoir consulté les sources ! 

  2. "ISO/IEC 2382:2015 Information technology — Vocabulary" https://www.iso.org/standard/63598.html. Note 2 to entry: The number of bits in a byte is usually 8 

  3. https://fr.wikipedia.org/wiki/Pr%C3%A9fixes_du_Syst%C3%A8me_international_d%27unit%C3%A9s 

  4. https://fr.wikipedia.org/wiki/Pr%C3%A9fixe_binaire