Python - Opérateurs Bitwise
Bonjour à tous, futurs sorciers Python !aujourd'hui, nous allons entreprendre un voyage passionnant dans le monde des opérateurs bitwise. Je sais ce que vous pourriez penser : "Opérateurs bitwise ? C'est quelque chose que seuls les informaticiens s'intéressent !" Mais croyez-moi, comprendre ces opérateurs peut être incroyablement utile et même amusant ! Alors, plongeons et dénousons les mystères des bits et des octets ensemble.
Opérateurs Bitwise en Python
Les opérateurs bitwise sont des opérateurs spéciaux qui travaillent sur les représentations binaires des nombres. Ils manipulent des bits individuels, qui sont les plus petites unités de données en informatique. Pensez aux bits comme de petits interrupteurs qui peuvent être soit allumés (1) soit éteints (0).
Avant de nous plonger dans chaque opérateur, jettons un coup d'œil rapide à tous les opérateurs bitwise disponibles en Python :
Opérateur | Nom | Description |
---|---|---|
& | ET | Définit chaque bit à 1 si les deux bits sont à 1 |
| | OU | Définit chaque bit à 1 si l'un des deux bits est à 1 |
^ | XOR | Définit chaque bit à 1 si seulement un des deux bits est à 1 |
~ | NON | Inverse tous les bits |
<< | Décalage à gauche | Décale vers la gauche en poussant des zéros à partir de la droite |
>> | Décalage à droite | Décale vers la droite en poussant des copies du bit le plus à gauche à partir de la gauche |
Maintenant, explorons chacun de ces opérateurs en détail.
Opérateur Bitwise ET en Python (&)
L'opérateur bitwise ET (&) compare chaque bit du premier opérande au bit correspondant du second opérande. Si les deux bits sont à 1, le bit de résultat correspondant est défini à 1. Sinon, le bit de résultat correspondant est défini à 0.
Regardons un exemple :
a = 5 # binaire : 0101
b = 3 # binaire : 0011
résultat = a & b
print(f"{a} & {b} = {résultat}") # Sortie : 5 & 3 = 1
Dans cet exemple, nous effectuons une opération bitwise ET entre 5 (0101 en binaire) et 3 (0011 en binaire). Le résultat est 1 (0001 en binaire).
Voici comment cela fonctionne :
0101 (5)
& 0011 (3)
----
0001 (1)
Comme vous pouvez le voir, seul le bit le plus à droite est à 1 dans les deux nombres, donc seul ce bit est à 1 dans le résultat.
Opérateur Bitwise OU en Python (|)
L'opérateur bitwise OU (|) compare chaque bit du premier opérande au bit correspondant du second opérande. Si l'un des bits est à 1, le bit de résultat correspondant est défini à 1. Sinon, le bit de résultat correspondant est défini à 0.
Voici un exemple :
a = 5 # binaire : 0101
b = 3 # binaire : 0011
résultat = a | b
print(f"{a} | {b} = {résultat}") # Sortie : 5 | 3 = 7
Dans ce cas, nous effectuons une opération bitwise OU entre 5 et 3. Le résultat est 7 (0111 en binaire).
Voici le détail :
0101 (5)
| 0011 (3)
----
0111 (7)
Le résultat a un 1 partout où l'un des nombres originaux avait un 1.
Opérateur Bitwise XOR en Python (^)
L'opérateur bitwise XOR (OU exclusif) (^) compare chaque bit du premier opérande au bit correspondant du second opérande. Si les bits sont différents, le bit de résultat correspondant est défini à 1. Si les bits sont les mêmes, le bit de résultat correspondant est défini à 0.
Regardons un exemple :
a = 5 # binaire : 0101
b = 3 # binaire : 0011
résultat = a ^ b
print(f"{a} ^ {b} = {résultat}") # Sortie : 5 ^ 3 = 6
Ici, nous effectuons une opération bitwise XOR entre 5 et 3. Le résultat est 6 (0110 en binaire).
Voici comment cela fonctionne :
0101 (5)
^ 0011 (3)
----
0110 (6)
Le résultat a un 1 partout où les bits dans les nombres originaux étaient différents.
Opérateur Bitwise NON en Python (~)
L'opérateur bitwise NON (~) est un opérateur unaire (il ne prend qu'un opérande) qui inverse les bits de son opérande. Chaque 0 devient 1 et chaque 1 devient 0.
Voici un exemple :
a = 5 # binaire : 0101
résultat = ~a
print(f"~{a} = {résultat}") # Sortie : ~5 = -6
Vous vous demandez peut-être pourquoi le résultat est -6. C'est parce que Python utilise le complément à deux pour représenter les nombres négatifs. Dans le complément à deux, le bit le plus à gauche représente le signe (0 pour positif, 1 pour négatif).
Voici ce qui se passe sous le capot :
00000101 (5)
~
11111010 (-6 en complément à deux)
Opérateur Bitwise Décalage à Gauche en Python (<<)
L'opérateur bitwise Décalage à gauche (<<) décale les bits du premier opérande vers la gauche par le nombre de places spécifié par le second opérande. Les nouveaux bits sur la droite sont remplis par des zéros.
Regardons un exemple :
a = 5 # binaire : 0101
b = 1
résultat = a << b
print(f"{a} << {b} = {résultat}") # Sortie : 5 << 1 = 10
Dans ce cas, nous décalons les bits de 5 vers la gauche par 1 position. Le résultat est 10 (1010 en binaire).
Voici ce qui se passe :
0101 (5)
Décalage vers la gauche par 1
1010 (10)
Chaque décalage vers la gauche multiplie effectivement le nombre par 2.
Opérateur Bitwise Décalage à Droite en Python (>>)
L'opérateur bitwise Décalage à droite (>>) décale les bits du premier opérande vers la droite par le nombre de places spécifié par le second opérande. Pour les nombres positifs, les nouveaux bits sur la gauche sont remplis par des zéros.
Voici un exemple :
a = 5 # binaire : 0101
b = 1
résultat = a >> b
print(f"{a} >> {b} = {résultat}") # Sortie : 5 >> 1 = 2
Ici, nous décalons les bits de 5 vers la droite par 1 position. Le résultat est 2 (0010 en binaire).
Voici le détail :
0101 (5)
Décalage vers la droite par 1
0010 (2)
Chaque décalage vers la droite divise effectivement le nombre par 2 (en arrondissant vers le bas à l'entier le plus proche).
Et voilà, les amis ! Nous avons exploré la terre des opérateurs bitwise en Python. Ces opérateurs peuvent sembler un peu abstraits au début, mais ils sont des outils incroyablement puissants, surtout lorsque vous travaillez avec des opérations de bas niveau ou avez besoin d'optimiser votre code pour la performance.
N'oubliez pas, la pratique fait le maître. Essayez de jouer avec ces opérateurs, expérimentez avec différents nombres et voyez quels résultats vous obtenez. Avant que vous ne le sachiez, vous manipulerez les bits comme un pro !
Bon codage, et que les bits soient toujours en votre faveur !
Credits: Image by storyset