Skip to content

Opérateurs binaires en Python (AND, OR, XOR, NOT, SHIFT)

Python fournit les opérateurs au niveau du bit, &(AND), |(OR), ^(XOR), ~(NOT, invert), <<(LEFT SHIFT), >>(RIGHT SHIFT).

Cet article décrit le contenu suivant.

  • AND au niveau du bit :&
  • OR au niveau du bit :|
  • XOR au niveau du bit :^
  • Opérations au niveau du bit avec des entiers négatifs
  • PAS au niveau du bit, inverser :~
  • Décalages de bits :<<, >>

Pour plus d’informations sur la conversion de nombres et de chaînes binaires, octaux et hexadécimaux à l’aide de bin(), oct(), hex() et format(), consultez les articles suivants.

Pour les opérations booléennes sur les types booléens (True, False) au lieu des opérations au niveau du bit, consultez l’article suivant. Utilisez and et or au lieu de & et |.

AND au niveau du bit :&

AND au niveau du bit avec l’opérateur & :

x = 9   # 0b1001
y = 10  # 0b1010

print(x & y)
print(bin(x & y))
# 8
# 0b1000

OR au niveau du bit :|

OU au niveau du bit avec le | opérateur:

print(x | y)
print(bin(x | y))
# 11
# 0b1011

XOR au niveau du bit :^

XOR au niveau du bit avec l’opérateur ^ :

print(x ^ y)
print(bin(x ^ y))
# 3
# 0b11

Les entrées et les sorties de chaque bit de AND, OR et XOR sont les suivantes.

Entrée 1 Entrée 2 ET OU XOR
1 1 1 1 0
1 0 0 1 1
0 1 0 1 1
0 0 0 0 0

Opérations au niveau du bit avec des entiers négatifs

Les opérations au niveau du bit sur les entiers négatifs sont traitées comme si les valeurs étaient exprimées en complément à deux.

Cependant, notez que si vous convertissez un entier négatif en une chaîne binaire en utilisant bin() ou format(), le signe moins sera utilisé à la place du format complément à deux.

Si vous souhaitez obtenir une chaîne exprimée en représentation en complément à deux, prenez le AND & au niveau du bit du nombre maximal de chiffres requis, par exemple, 0b1111 (= 0xf) pour 4 bits, 0xff pour 8 bits et 0xffff pour 16 bits.

x = -9

print(x)
print(bin(x))
# -9
# -0b1001

print(bin(x & 0xff))
print(format(x & 0xffff, 'x'))
# 0b11110111
# fff7

PAS au niveau du bit, inverser :~

L’opérateur ~ donne l’inversion au niveau du bit. L’inversion bit à bit de x est définie comme -(x+1).

Si la valeur d’entrée x est considérée comme un complément à deux et que tous les bits sont inversés, cela équivaut à -(x+1).

La conversion de ~x en chaîne ne produit pas une chaîne avec les bits de la valeur d’origine inversés.

x = 9  # 0b1001

print(~x)
print(bin(~x))
# -10
# -0b1010

En effectuant l’opération AND pour créer une chaîne de représentation en complément à deux, vous pouvez obtenir une chaîne avec les bits inversés.

Par exemple, pour obtenir une chaîne inversée à 4 chiffres, spécifiez ’04b’ avec format() et complétez-la avec des zéros.

print(bin(~x & 0xff))
print(format(~x & 0b1111, '04b'))
# 0b11110110
# 0110

Décalages de bits :<<, >>

Décalage gauche et décalage droit avec les opérateurs <<, >> :

x = 9  # 0b1001

print(x << 1)
print(bin(x << 1))
# 18
# 0b10010

print(x >> 1)
print(bin(x >> 1))
# 4
# 0b100

Pour les valeurs négatives, le bit de signe est développé et décalé, et les signes positif et négatif ne changent pas. Les valeurs négatives sont considérées comme ayant l’infini 1 sur le côté gauche.

x = -9
print(bin(x))
print(bin(x & 0xff))
# -0b1001
# 0b11110111

print(x << 1)
print(bin(x << 1))
print(bin((x << 1) & 0xff))
# -18
# -0b10010
# 0b11101110

print(x >> 1)
print(bin(x >> 1))
print(bin((x >> 1) & 0xff))
# -5
# -0b101
# 0b11111011

Il est difficile de comprendre si vous le considérez comme une valeur numérique, il est donc préférable de le considérer comme une chaîne de complément à deux.