Bases de numération et entiers positifs
Introduction
Quand vous écrivez 2026, vous utilisez sans y penser une convention : chaque chiffre occupe une position qui correspond à une puissance de 10. La position des unités vaut , celle des dizaines , celle des centaines , et ainsi de suite. C'est la base 10, ou notation décimale.
Un ordinateur, lui, ne distingue physiquement que deux états : courant qui passe ou non, aimantation positive ou négative, tension haute ou basse. Il est donc naturel qu'il travaille en base 2 : il n'utilise que deux chiffres, 0 et 1, appelés bits (binary digit). Pour faciliter la lecture humaine de ces longues suites de bits, on utilise aussi la base 16 (hexadécimal) et, plus rarement, la base 8 (octal).
Le principe d'une base
Dans une base (avec ), on dispose de chiffres distincts, allant de à . Un nombre s'écrit comme une suite de ces chiffres, et la valeur du nombre se calcule en sommant chaque chiffre multiplié par la puissance de correspondant à sa position.
Pour un nombre noté dans la base (les étant les chiffres, à ne pas confondre avec la base ) :
| Base | Nom | Chiffres utilisés | Préfixe Python |
|---|---|---|---|
| 2 | binaire | 0, 1 | 0b |
| 8 | octal | 0 à 7 | 0o |
| 10 | décimal | 0 à 9 | aucun |
| 16 | hexadécimal | 0 à 9, puis A à F | 0x |
En hexadécimal, les lettres A à F représentent les valeurs à .
Ainsi, B vaut et F vaut .
0b, 0o et 0x jouent le même rôle.Du binaire au décimal
Pour convertir une écriture binaire en décimal, on somme les puissances de 2 correspondant aux bits valant 1.
Exemple : convertir .
Python sait faire cette conversion automatiquement grâce à int() avec sa
base passée en second argument :
print(int("1011", 2)) # 11
print(int("FF", 16)) # 255
print(int("17", 8)) # 15
Que vaut (1101)2(1101)2(1101)2 en décimal ?
Du décimal au binaire — les divisions successives
Pour passer du décimal au binaire, on divise le nombre par 2 et on note le reste. On répète l'opération sur le quotient jusqu'à obtenir 0. La lecture des restes de bas en haut donne l'écriture binaire.
Exemple : convertir en binaire.
| Division | Quotient | Reste |
|---|---|---|
En lisant les restes de bas en haut : .
Sortie attendue :
13 en binaire : 0b1101
13 en hexadécimal : 0xd
13 en octal : 0o15
Le pont avec l'hexadécimal
L'hexadécimal a un atout précieux : chaque chiffre hexadécimal correspond exactement à 4 bits. La conversion binaire ↔ hexadécimal se fait donc par blocs, sans aucun calcul.
| Hex | Binaire | Hex | Binaire |
|---|---|---|---|
0 | 0000 | 8 | 1000 |
1 | 0001 | 9 | 1001 |
2 | 0010 | A | 1010 |
3 | 0011 | B | 1011 |
4 | 0100 | C | 1100 |
5 | 0101 | D | 1101 |
6 | 0110 | E | 1110 |
7 | 0111 | F | 1111 |
Exemple : .
C'est pour cela qu'on rencontre l'hexadécimal partout en informatique :
adresses mémoire, couleurs CSS (#FF8800), valeurs d'un octet… Lire un octet
en hexadécimal, c'est lire 2 chiffres au lieu de 8 bits.
Combien de bits sont nécessaires pour écrire (A3)16(A3)(A3)16 ?
Combien de bits pour un nombre ?
Avec bits, on peut représenter valeurs différentes, soit les entiers de à .
| Bits | Valeurs représentables | Maximum |
|---|---|---|
| 4 | ||
| 8 (octet) | ||
| 16 | ||
| 32 | environ 4 milliards |
Inversement, pour écrire un entier positif, il faut
bits. En pratique, vous pouvez aussi compter en utilisant bin(N) :
n = 1000
print(bin(n)) # 0b1111101000
print(len(bin(n)) - 2) # 10 — on retire le préfixe "0b"
Pièges courants
- Ne pas confondre la base et le nombre de chiffres. vaut , pas dix.
- En Python,
0b10est un entier dont la valeur est . Quand vous l'affichez avecprint(0b10), Python affiche en décimal par défaut. - L'écriture
010dans un code Python ancien (Python 2) était un octal — source de bugs. En Python 3, il faut écrire0o10explicitement.
Pour aller plus loin
Python gère les entiers de taille arbitraire : vous pouvez calculer sans erreur, contrairement à beaucoup d'autres langages où les entiers sont bornés à 32 ou 64 bits. Vous reverrez cette notion dans le cours suivant sur les entiers relatifs.