
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.
