Parcours
/
Python
Python
/
Programme
/
Binaire, octal et hexadécimal
Bi

Binaire, octal et hexadécimal en Python

{one: "%{count} exercice", many: "%{count} d'exercices", other: "%{count} exercices"}

À propos de Binaire, octal et hexadécimal

Le binaire, l'octal et l'hexadécimal (aussi appelé hex) sont différents systèmes de numération avec des bases différentes. Le binaire est en base 2, l'octal en base 8 et l'hexadécimal en base 16. En Python, les entiers ordinaires sont en base 10. Le binaire, l'octal et l'hexadécimal sont tous des représentations d'entiers. Ce qui signifie qu'ils représentent des nombres positifs et négatifs (y compris zéro) sans fractions ni décimales, et qu'ils prennent en charge toutes les opérations que l'on peut faire avec des entiers.

Binaire

Le binaire est un système de numération en base 2, qui n'utilise que les chiffres 0 et 1. Il représente couramment les états 0 (« éteint ») et 1 (« allumé ») du flux électrique qui traverse les transistors et les interrupteurs des ordinateurs, ainsi que les charges positives et négatives des supports de stockage magnétiques. Le binaire peut représenter tous les entiers que l'on utilise en base 10.

Un extrait du système en base 2 ressemble à ceci, même s'il continue à l'infini et ne s'arrête pas à 128 :

128 64 32 16 8 4 2 1
2 ** 7 2 ** 6 2 ** 5 2 ** 4 2 ** 3 2 ** 2 2 ** 1 2 ** 0

Donc si l'on veut représenter le nombre 6 en binaire, on obtient 110.

Valeur de position 4 2 1
Nombre binaire 1 1 0

Et l'opération serait : 4 + 2 + 0 = 6

Un autre exemple : 19

Valeur de position 16 8 4 2 1
Nombre binaire 1 0 0 1 1

Le nombre binaire serait : 10011 Et l'opération serait : 16 + 0 + 0 + 2 + 1 = 19

Le binaire en Python

En Python, on peut représenter des littéraux binaires à l'aide du préfixe 0b. Si l'on écrit 0b10011, Python l'interprète comme un nombre binaire et le convertit en base 10.

>>> 0b10011
19

>>> type(0b10011)
<class 'int'>

En Python, le binaire n'est qu'une autre façon d'écrire un entier ; la représentation binaire est donc un entier pour toutes les opérations mathématiques.

Si tu écris un nombre avec le préfixe 0b qui n'appartient pas au système binaire, Python lève une SyntaxError.

Traceback (most recent call last):
  File "c:\binary.py", line 1, in <module>
    0b10211
SyntaxError: invalid digit '2' in binary literal

Opérations sur les nombres binaires

Comme les nombres binaires sont des entiers, on peut leur appliquer toutes les opérations que l'on peut faire avec des entiers.

# addition
>>> 0b10011 + 0b10011
38

# multiplication
>>> 0b10011 * 0b10011
361

On peut aussi effectuer des opérations entre une représentation binaire et une représentation entière. Cependant, les règles habituelles des opérateurs mathématiques s'appliquent : la division de deux nombres binaires ou de deux entiers renvoie un float, même si la division ne donne pas de partie décimale.

>>> 0b10011 + 19
38

>>> 0b10011/0b10011
1.0

>>> 0b10011/3
6.333333333333333

Convertir vers et depuis la représentation binaire

Python convertit automatiquement un littéral binaire en int. Pour convertir un int en représentation binaire, utilise la fonction intégrée [bin()][bin]. bin() renvoie une str de l'équivalent binaire, avec le préfixe 0b.

>>> bin(19)
'0b10011'

Pour convertir un littéral binaire en entier, on peut utiliser la fonction intégrée int(), en lui passant une string de la représentation binaire et un argument de base :

>>> int("0b10011", 2)
19

Donner une mauvaise base (ou une représentation binaire invalide) lève une ValueError :

Traceback (most recent call last):
  File "c:\binary.py", line 4, in <module>
    int("0b10011", 3)
ValueError: invalid literal for int() with base 3: '0b10011'

Méthodes binaires

Il existe aussi quelques méthodes particulières que l'on peut utiliser sur les nombres binaires.

<int>.bit_length() renvoie le nombre de bits nécessaires pour représenter le nombre :

>>> 0b11011.bit_length()
5

<int>.bit_count() renvoie le nombre de bits à 1 dans le nombre binaire. Par exemple, bit_count() appliqué à '0b11011' renvoie 4 :

>>> 0b11011.bit_count()
4
Note

Si tu travailles en local, bit_count() nécessite au moins Python 3.10. L'éditeur en ligne d'Exercism prend actuellement en charge toutes les fonctionnalités jusqu'à Python 3.11.

Octal

L'octal est un système de numération en base 8. Il utilise les chiffres 0, 1, 2, 3, 4, 5, 6 et 7.

En Python, on peut représenter des nombres octaux à l'aide du préfixe 0o. Comme pour le binaire, Python convertit automatiquement une représentation octale en int.

>>> 0o123
83

Comme pour le binaire, les nombres octaux sont des entiers et prennent en charge toutes les opérations sur les entiers. Ajouter le préfixe 0o à un nombre qui n'appartient pas au système octal lève une SyntaxError.

Convertir vers et depuis la représentation octale

Pour convertir un int en représentation octale, tu peux utiliser la fonction intégrée [oct()][oct]. Elle fonctionne comme la fonction bin() et renvoie une string :

>>> oct(83)
'0o123'

Pour convertir un nombre octal en entier, on peut utiliser la fonction int(), en lui passant une string représentant le nombre octal et la base (8) comme arguments :

>>> int("0o123", 8)
83

Comme pour le binaire, donner une mauvaise base lève une ValueError.

Hexadécimal

L'hexadécimal est un système de numération en base 16. Il utilise les chiffres de 0 à 9 et les lettres A, B, C, D, E et F. A vaut 10, B vaut 11, C vaut 12, D vaut 13, E vaut 14 et F vaut 15.

On peut représenter des nombres hexadécimaux en Python à l'aide du préfixe 0x. Comme pour le binaire et l'octal, Python convertit automatiquement les littéraux hexadécimaux en int.

>>> 0x123
291

Comme pour le binaire et l'octal, les littéraux hexadécimaux sont des entiers, et tu peux leur appliquer toutes les opérations sur les entiers. Ajouter le préfixe 0x à un nombre qui n'est pas hexadécimal lève une SyntaxError.

Convertir vers et depuis la représentation hexadécimale

Pour convertir un int en représentation hexadécimale, tu peux utiliser la fonction intégrée [hex()][hex]. Elle fonctionne comme la fonction bin() et renvoie une string :

>>> hex(291)
'0x123'

Pour convertir une représentation hexadécimale en entier, on peut utiliser la fonction int(), en lui passant une string hexadécimale et la base (16) comme arguments :

>>> int("0x123", 16)
291

Comme pour le binaire et l'octal, donner une mauvaise base lève une ValueError.

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet