Aller au contenu

Partie 1 : Entiers positifs et bases de numération


Au quotidien, nous comptons en base 10 (système décimal). Nous utilisons 10 chiffres : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Ce choix est lié à nos 10 doigts, mais il n'a rien d'universel.

Les ordinateurs, eux, ne connaissent que deux états électriques : tension haute ou tension basse. Ils travaillent donc en base 2 (système binaire), avec seulement deux chiffres : 0 et 1.

Pour des raisons de lisibilité, les informaticiens utilisent aussi la base 16 (système hexadécimal), qui est un raccourci pratique pour écrire des nombres binaires.


Dans le système décimal, la position d'un chiffre détermine sa valeur. Prenons le nombre 5 307 :

MilliersCentainesDizainesUnités
5307
5 × 10³3 × 10²0 × 10¹7 × 10⁰
5 00030007

On a donc : 5 307 = 5 × 10³ + 3 × 10² + 0 × 10¹ + 7 × 10⁰

Chaque position correspond à une puissance de 10. C'est ce qu'on appelle la décomposition en puissances de la base.

Ce principe fonctionne dans n'importe quelle base b >= 2. Un nombre écrit en base b utilise les chiffres de 0 à b - 1, et chaque position correspond à une puissance de b.


En base 2, on n'utilise que deux chiffres : 0 et 1. Chaque chiffre binaire s'appelle un bit (contraction de l'anglais binary digit).

Un groupe de 8 bits forme un octet (en anglais byte).

TermeDéfinition
BitPlus petite unité d'information. Vaut 0 ou 1.
OctetGroupe de 8 bits. Peut représenter 2⁸ = 256 valeurs différentes (de 0 à 255).

La lecture d'un nombre binaire suit le même principe que le décimal, mais avec des puissances de 2.

Il est utile de mémoriser les premières puissances de 2 :

2⁰2¹2²2³2⁴2⁵2⁶2⁷2⁸2⁹2¹⁰
12481632641282565121 024

3.4 Conversion décimal vers binaire : méthode des divisions successives

Section intitulée « 3.4 Conversion décimal vers binaire : méthode des divisions successives »

Pour convertir un entier décimal en binaire, on effectue des divisions euclidiennes successives par 2 et on lit les restes de bas en haut.

3.5 Méthode alternative : soustraction de puissances de 2

Section intitulée « 3.5 Méthode alternative : soustraction de puissances de 2 »

On peut aussi procéder par soustractions successives de la plus grande puissance de 2 possible :


En base 16, il faut 16 symboles. Comme nous n'avons que 10 chiffres (0 à 9), on ajoute les six premières lettres de l'alphabet :

Hexadécimal0123456789ABCDEF
Décimal0123456789101112131415

Même principe que pour le binaire, avec des puissances de 16 :

On applique la méthode des divisions successives par 16 :

4.4 Conversion binaire vers hexadécimal (et inversement)

Section intitulée « 4.4 Conversion binaire vers hexadécimal (et inversement) »

La base 16 est une puissance de 2 (16 = 2⁴), ce qui crée une correspondance directe : chaque chiffre hexadécimal correspond exactement à un groupe de 4 bits.

Table de correspondance :

HexaBinaireHexaBinaire
0000081000
1000191001
20010A1010
30011B1011
40100C1100
50101D1101
60110E1110
70111F1111

C'est pour cette raison que l'hexadécimal est si utilisé en informatique : il offre une notation compacte du binaire tout en restant facile à convertir.


Pour représenter un entier positif N en binaire, combien de bits sont nécessaires ?

La réponse est liée à la plus grande puissance de 2 inférieure ou égale à N :

Nombre de bitsValeur maximaleNombre de valeurs
112
41516
8 (1 octet)255256
1665 53565 536
324 294 967 295environ 4,3 milliards
64environ 1,8 × 10¹⁸environ 1,8 × 10¹⁹

Python offre des fonctions intégrées pour travailler avec les bases :

6.1 Conversion décimal vers binaire et hexadécimal

Section intitulée « 6.1 Conversion décimal vers binaire et hexadécimal »
>>> bin(45)
'0b101101'
>>> hex(750)
'0x2ee'
>>> hex(255)
'0xff'

Les préfixes 0b et 0x indiquent respectivement la base 2 et la base 16.

La fonction int() avec un second argument permet de convertir depuis n'importe quelle base :

>>> int('101101', 2)
45
>>> int('2F', 16)
47
>>> int('1A3', 16)
419

On peut écrire directement des nombres en base 2 ou 16 dans le code Python :

>>> 0b101101
45
>>> 0x2F
47
>>> 0b11111111
255
>>> 0xFF
255
>>> (45).bit_length()
6
>>> (255).bit_length()
8
>>> (256).bit_length()
9

ConceptBase 10Base 2Base 16
NomDécimalBinaireHexadécimal
Chiffres utilisés0 à 90 et 10 à 9 et A à F
Préfixe Python(aucun)0b0x
Fonction Pythonint()bin()hex()
Usage principalVie couranteStockage machineNotation compacte
ConversionMéthode
Base b vers base 10Décomposition en puissances de b
Base 10 vers base bDivisions successives par b (lire les restes de bas en haut)
Base 2 vers base 16Regrouper les bits par paquets de 4
Base 16 vers base 2Remplacer chaque chiffre hexa par ses 4 bits