Nous utilisons tous les jours la base 10 pour compter, c'est la base décimale. Par exemple, le nombre 4097 représente 4 milliers, 0 centaine, 9 dizaines et 7 unités.
$4097 = 4\times 1000 + 0 \times 100 + 9 \times 10 + 7 \times 1$ c'est-à-dire : $4097 = \textbf 4 \times 10^3 + \textbf 0\times 10^2 + \textbf 9 \times 10^1 + \textbf 7 \times 10^0$
On retrouve les chiffres $4$, $0$, $9$ et $7$ dans cette écriture avec des puissances de 10. On peut schématiser cela ainsi :
Puissances de 10 | ... | $10^6$ | $10^5$ | $10^4$ | $10^3$ | $10^2$ | $10^1$ | $10^0$ |
---|---|---|---|---|---|---|---|---|
Chiffres | ... | x | x | x | 4 | 0 | 9 | 7 |
En base 10, chaque chiffre peut prendre 10 valeurs : de $0$ à $9$.
Comment ajouter 1 en base 10 ?
Vous le faites intuitivement, mais analysons ce qui se passe avec les chiffres de la représentation décimale. Il faudra faire exactement la même chose en base 2.
On regarde le chiffre des unités : s'il n'est pas au maximum ($\neq 9$) on ajoute lui ajoute $1$ ; s'il est au maximum, on le met à zéro et on regarde si on peut ajouter 1 au chiffre des dizaines, et ainsi de suite.
Voyons quelques exemples pour fixer les idées :
Vous avez vu que tout machine informatique, en raison de son architecture, ne manipule que des données dont l'unité minimale est le bit 0/1.
Activité : J'ai besoin de 8 élèves volontaires ! Règle du jeu : Chaque élève change la position de son bras quand son voisin de gauche baisse le sien.
Vous venez de découvrir comment on peut représenter les entiers naturels en base 2 (c'est-à-dire uniquement avec deux chiffres : 0 et 1).
Nombre décimal | Nombre en binaire |
---|---|
0 | 0 |
1 | 1 |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 |
Tout cela est un peu pénible, et heureusement que je ne vous ai pas demandé de convertir 2019 en binaire... Il y a bien entendu une méthode pour convertir un nombre décimal en binaire.
En divisant le nombre par 2, on obtient comme premier reste, le nombre d'unités. Si on recommence, on obtient les chiffres suivants de l'écriture en base 2. On s'arrête lorsque le quotient vaut 0.
Exemple en base 2 : Codage de 42 en base 2
42 / 2 -> 21 reste 0 21 / 2 -> 10 reste 1 10 / 2 -> 5 reste 0 5 / 2 -> 2 reste 1 2 / 2 -> 1 reste 0 1 / 2 -> 0 reste 1
On obtient le code en écrivant les restes de gauche à droite à partir du dernier reste obtenu. On a donc : $42 = (101010)_2$
On peut calculer l'écriture en binaire avec la fonction Python bin
.
bin(42)
Convertissez (à la main) en base 2 les nombres décimaux suivants : 63, 257, 2019.
Vous vérifierez vos résultats avec Python en utilisant la fonction bin
.
La conversion binaire vers décimal est plus simple.
De la même manière que les chiffres de l'écriture décimale représentent des puissances de 10, les chiffres de l'écriture binaire représentent des puissances de 2.
Prenons l'exemple du nombre binaire $11010111$ :
Puissances de 2 | $2^7$ | $2^6$ | $2^5$ | $2^4$ | $2^3$ | $2^2$ | $2^1$ | $2^0$ |
---|---|---|---|---|---|---|---|---|
Chiffres | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 |
Ainsi, pour convertir $(11010111)_2$ en décimal, on multiplie le premier chiffre (celui de droite) par $2^0$, le second par $2^1$, le troisième par $2^2$, etc. On calcule ensuite la somme de ces valeurs pour obtenir le nombre en décimal.
On obtient : $$(11010111)_2 = \textbf 1 \times 2^0 + \textbf 1 \times 2^1 + \textbf 1 \times 2^2 + \textbf 0 \times 2^3 + \textbf 1 \times 2^4 + \textbf 0 \times 2^5 + \textbf 1 \times 2^6 + \textbf 1 \times 2^7$$ c'est-à-dire : $$(11010111)_2 = 1 + 2 + 4 + 0 + 16 + 0 + 64 + 128 = 215.$$
Attention à bien commencer par le chiffre des unités !
On peut aussi directement saisir un nombre en binaire en préfixant son écriture par 0b
.
0b11010111
On comme cela :
int('11010111', 2) # le '2' pour indiquer que la chaine de caractères est un nombre en base 2
Convertissez en décimal les nombres binaires suivants : $(11011)_2$ et $(1100011011)_2$. Vous vérifierez ensuite vos résultats avec Python comme indiqué juste avant.
Cette base est appelée base hexadécimale (hexa = 6 + décimale = 10). Nous allons passer plus rapidement cette partie car les méthodes restent les mêmes qu'avec la base 2.
Ainsi, en base 16, chaque "chiffre" est codé par : $0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F$ avec la correspondance suivante :
Base 10 | Base 16 | Base 2 |
---|---|---|
0 | 0 | 0 |
1 | 1 | 1 |
2 | 2 | 10 |
3 | 3 | 11 |
4 | 4 | 100 |
5 | 5 | 101 |
6 | 6 | 110 |
7 | 7 | 111 |
8 | 8 | 1000 |
9 | 9 | 1001 |
10 | A | 1010 |
11 | B | 1011 |
12 | C | 1100 |
13 | D | 1101 |
14 | E | 1110 |
15 | F | 1111 |
Pourquoi la base 16 ? L'avantage de la base 16 réside dans sa facilité de conversion de et vers la base 2. Un chiffre en base 16 remplace 4 bits (chiffres en base 2). Elle est donc un compromis entre le code binaire des machines et une base de numération pratique à utiliser pour les ingénieurs. L'hexadécimal a été utilisé la première fois en 1956 par les ingénieurs de l'ordinateur Bendix G-15.
Pour plus d'informations sur le système hexadécimal : Système hexadécimal - Wikipédia
L'algorithme est exactement le même que pour la conversion en binaire. Il suffit juste de diviser successivement par 16 et non par 2.
Exemple : Conversion de 215 en base 16
215 / 16 -> 13 reste 7 13 / 16 -> 0 reste 13 (D)
On obtient le code en écrivant les restes de gauche à droite à partir du dernier reste obtenu. On a donc : $215 = (D7)_{16}$
On peut expérimenter en Python le codage en base 16 grace à la fonction hex
.
hex(215)
Pourquoi la base 16 ? (bis)
Même principe que la conversion binaire --> décimale.
Plutôt qu'un long discours, un exemple :
Exemple : conversion de $(4E8)_{16}$ en base 10 :
Puissances de 16 | $16^2$ | $16^1$ | $16^0$ |
---|---|---|---|
Chiffres | 4 | E | 8 |
Donc : $(4E8)_{16}=8\times 16^0 + E\times 16^1 + 4 \times 16^2 = 8 \times 1 + 14 \times 16 + 4 \times 256 = 8 + 224 + 1024 = 1256$.
On peut vérifier avec Python en préfixant son écriture par 0x
.
0x4e8
# ou aussi
int('4e8', 16)
Dans une base $b\geq 2$ quelconque, on procède exactement de la même façon mais avec des puissances de $b$ !
Exemple : Ecriture de l'entier 38 en base 5. $$38 = \textbf 1 \times 5^2 + \textbf 2 \times 5^1 + \textbf 3 \times 5^0.$$ Le nombre 38 s'écrit donc $(123)_5$ en base 5.
Écriture d’un entier positif dans une base $b \geq 2$ :
Si $x = a_n\times b^n + a_{n-1}\times b^{n-1} + ... + a_2\times b^2 + a_1\times b^1 + a_0\times b^0$
où les $a_i$ sont des chiffres entre 0 et $b-1$
Dans ce cas, $a_n a_{n-1}... a_2 a_1 a_0$ est l'écriture en base $b$ de $x$.
On note cela : $$ x = (a_n a_{n-1}... a_2 a_1 a_0)_b .$$
Ressources :
Germain BECKER & Sébastien POINT, Lycée Mounier, ANGERS