Première - Binaire et Héxadécimal

Pour dénombrer quelque chose, nous avons pour habitude d’utiliser les dix chiffres que sont 0,1,2,3,4,5,6,7,8,9. Ce n’a pas toujours été le cas : les Babyloniens utilisaient 60 chiffres (qu’ils représentaient à l’aide de deux symboles, le clou et le chevron), les Mayas comptaient avec 20 chiffres et disposaient du 0...

Nos ordinateurs, eux, n’utilisent que 2 chiffres. Comment font-ils ?

Le système décimal

Le système décimal est un système de numération en base 10 : tout nombre se décompose en puissances de 10. Le chiffre le plus à droite est appelé chiffre des unités, celui à sa droite chiffre des dizaines, etc...

Il est essentiel de bien comprendre que le système de numération décimal est positionnel : cela signifie que la position (ou le rang) d’un chiffre est importante dans l’écriture d’un nombre, et qu’elle détermine son poids et sa valeur, définis par : $$ \text{Poids} = ~\text{Base}^\text{Rang} \hspace{1cm} \text{Valeur} = ~\text{Chiffre} \times \text{Poids}$$

Un exemple avec 5173

Le nombre 5173 se décompose sans surprise en $5000 + 100 + 70 + 3 = 5 \times 10^3 + 1 \times 10^2 + 7 \times 10^1 + 3 \times 10^0$.

Système binaire : des 0 et des 1

Compter en base 2

Le système binaire est un système de numération en base 2. Cela signifie que :

D’ailleurs, on ne parle plus de chiffre en binaire. On parle de chiffre binaire pour 0 et 1, ou binary digit en anglais, que l’on raccourcit en bit. Ainsi, le nombre 10010110 (écrit en base 2) est un nombre binaire à 8 bits.

Pour éviter les confusions, on pourra noter $(10010110)_2$ pour désigner un nombre en base 2

En décimal, on fait des « paquets de 10 » (1, 10, 100, 1000, ...) alors qu'en binaire, on fait des « paquets de 2 » (1, 2, 4, 8, 16, ...). Commençons à compter :

Valeur décimale Valeur binaire
00
11
210
311
4100
5101
6110

En base 10, on ne peut dépasser le chiffre 9 : on revient alors à 0, et on incrémente le chiffre de rang supérieur.

En base 2, la règle est identique : il est impossible de dépasser 1, alors si c’est le cas, on revient à 0 et on incrémente le chiffre de rang supérieur.

Donner les écritures binaires des nombres 7, 8, 9 et 10.
Valeur décimale Valeur binaire
7111
81000
91001
101010
Chaque chiffre 1 dans l'écriture binaire représente une puissance de 2. Par exemple, $(101)_2$ signifie que l'on fait 1 paquet de 1 et 1 paquet de 4 : c'est donc le nombre décimal 5.

Du décimal au binaire

Pour écrire le nombre 26 en binaire, on ne continue pas à remplir le tableau précédent : on raisonne en puissances de 2. Les premières puissances de 2 sont à connaître par coeur !

$n$012345
$2^n$12481632

La méthode est la suivante :

$n$43210
$2^n$168421
2711010

On peut donc écrire $26 = (11010)_2$.

Donner la liste des puissances de 2 de $2^0$ à $2^8$.
Convertir les nombres suivants en binaire : $$ 23 \hspace{1cm} 97 \hspace{1cm} 160 $$ On pourra grouper les bits par 4, comme on groupe classiquement les chiffres décimaux par 3.
$$ 23 = (1~0111)_2 \hspace{1cm} 97 = (110~0001)_2 \hspace{1cm} 160 = (1010~0000)_2$$
À partir de la valeur binaire de 97, donner les valeurs binaires de 98, 99 et 100.
$$ 98 = (110~0010)_2 \hspace{1cm} 99 = (110~0011)_2 \hspace{1cm} 100 = (110~0100)_2$$
Comment reconnaît-on les nombres pairs et impairs en binaire ?
Les nombres pairs terminent par 0, tandis que les nombres impairs terminent par 1 !

Méthode des divisions successives

Pour convertir un nombre en binaire, on peut utiliser la méthode suivante, qui est une méthode algorithmique : il est facile d’en faire un algorithme et de le programmer sur un ordinateur. On réalise des divisions successives par 2 du nombre à convertir, jusqu’à trouver un quotient nul. On lit ensuite la liste des restes de bas en haut. Exemple avec 42 :

On a donc $42 = (101010)_2$.

Avec cette méthode, « on ne réfléchit pas » : on se contente de faire les calculs. Comme un ordinateur !
Appliquer cette méthode pour convertir le nombre 328 en binaire.
$$ 328 = (101001000)_2$$

Du binaire au décimal

Passer du binaire au décimal n’a rien de compliqué. Il suffit de se rappeler que chaque bit compte pour une puissance de 2, et que seules les puissances de 2 dont le bit est égal à 1 sont comptabilisées.

Prenons le nombre $(1010~1101)_2$. On peut s’aider d’un tableau :

Nombre 1 0 1 0 1 1 0 1
Rang76543210
Puissance de 2$2^7$$2^6$$2^5$$2^4$$2^3$$2^2$$2^1$$2^0$
Valeurs 128 64 32 16 8 4 2 1

On a donc $(1010~1101)_2$ = 1$\times 2^7$ + 0$\times 2^6$ + 1$\times 2^5$ + 0$\times 2^4$ + 1$\times 2^3$ + 1$\times 2^2$ + 0$\times 2^1$ + 1$\times 2^0$ = 128 + 32 + 8 + 4 + 1 = 173.

Convertir en décimal les nombres binaires $(1110)_2$ et $(1010 0101)_2$.
$$ (1110)_2 = 14 \hspace{1cm} (1010 0101)_2 = 165 $$
Quel est le plus grand nombre que l’on peut écrire avec 8 bits ? avec 16 bits ? Donner les valeurs décimales correspondantes.

Avec 8 bits : $(1111~1111)_2$ = 255

Avec 16 bits : $(1111~1111~1111~1111)_2$ = 65 535

Pour calculer rapidement ces valeurs, il suffit de considérer le nombre entier suivant, par exemple $(1~0000~0000)_2 = 2^8 = 256$. La valeur précédente est $(1111~1111)_2 = 255$.

Bit et octet

Un octet est un nombre binaire de 8 bits. En anglais, octet se dit byte (à ne pas confondre avec bit... !).

L’octet est l’unité de mémoire de l’informatique.

Un octet permet de représenter $2^8$ = 256 nombres différents : de 0 à 255 = $(1111~1111)_2$. Imaginons un instant la chose suivante : à chaque lettre minuscule et majuscule de l’alphabet, on attribue un nombre. On attribue également un nombre aux différents signesde ponctuations, ainsi qu’aux lettres accentuées... et aussi aux chiffres ! En tout, cela fait moins de 256 caractères.

À l’aide d’un octet, on peut donc représenter n’importe quelle lettre de notre clavier d’ordinateur.

Bon, en réalité, c’est un peu plus compliqué que ça, mais l’idée est là. C’est ce que l’on appelle l’encodage des caractères. Nous y reviendrons dans un prochain chapitre.

Convertir 56 et 123 en binaire, et donner le résultat sous forme d’octet (on rajoutera d’éventuels zéros inutiles).
$$ 56 = (0011~1000)_2 \hspace{1cm} 123 = (0111~1011)_2$$
Pour représenter le nombre 7837 en binaire, de combien d’octets a-t-on besoin ? Donner cette représentation.
7837 s'écrit sur 13 bits, il faut donc 2 octets (16 bits) au minimum pour le représenter : $$ 7837 = (0001~1110~1001~1101)_2 $$

Système héxadécimal : compter jusqu'à 16

Compter en base 16

Le système héxadécimal est un système de numération en base 16. Ainsi :

Compter en « paquets de 16 » est un peu plus compliqué, du fait de la taille des paquets : 1, 16, 256, 4096, ...

Mais comment obtenir 16 chiffres ? C’est simple :

Un chiffre n’est rien de plus qu’un symbole : on pourrait choisir tout autre chose, mais par convention, on utilise les lettres de A à F dans le système héxadécimal.
Valeur décimale Valeur héxadécimale
00
11
22
33
44
55
66
77
88
99
10A
11B
12C
13D
14E
15F

Au delà, on fait un paquet de 16 :

Valeur décimale Valeur héxadécimale
15F
16(10)$_{16}$
17(11)$_{16}$
18(12)$_{16}$
19(13)$_{16}$

Au delà de 31, on fait 2 paquets de 16 :

Valeur décimale Valeur héxadécimale
31(1F)$_{16}$
32(20)$_{16}$
33(21)$_{16}$
34(22)$_{16}$
35(23)$_{16}$

À partir de 255 = (FF)$_{16}$, on commence à faire des paquets de 256 !

Valeur décimale Valeur héxadécimale
255(FF)$_{16}$
256(100)$_{16}$
257(101)$_{16}$
258(102)$_{16}$
259(103)$_{16}$

Du décimal à l'héxadécimal

La méthode est analogue à la conversion binaire : on utilise les divisions successives par 16 (et non plus par 2). C'est généralement plus difficile car la table de 16 est plus compliquée que la table de 2, mais souvent plus rapide.

Dans l'exemple ci-dessus, on a 42 = (2A)$_{16}$ : 10 s'écrit A en héxadécimal !

Convertir les nombres 72, 94, 165 et 680 en héxadécimal.
Convertir 78 en héxadécimal, puis en déduire les écritures héxadécimales de 79 et 80.