Skip to content

Bitweise Operatoren in Python (AND, OR, XOR, NOT, SHIFT)

Python

Python bietet die bitweisen Operatoren &(AND), |(OR), ^(XOR), ~(NOT, invert), <<(LINKS UMSCHALT), >>(RECHTS UMSCHALT).

Dieser Artikel hat folgenden Inhalt.

  • Bitweise UND:&
  • Bitweises ODER:|
  • Bitweises XOR:^
  • Bitweise Operationen mit ganzen Zahlen
  • Bitweises NICHT, invertieren:~
  • Bitverschiebungen:<<, >>

Weitere Informationen zum Konvertieren von binären, oktalen und hexadezimalen Zahlen und Zeichenfolgen mit bin(), oct(), hex() und format() finden Sie in den folgenden Artikeln.

Informationen zu booleschen Operationen für boolesche Typen (True, False) anstelle von bitweisen Operationen finden Sie im following Artikel. Verwenden Sie und oder anstelle von & und |.

Bitweise UND:&

Bitweises UND mit dem Operator &:

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

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

Bitweises ODER:|

Bitweises OR mit dem | Operator:

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

Bitweises XOR:^

Bitweises XOR mit dem ^-Operator:

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

Die Ein- und Ausgänge für jedes Bit von AND, OR und XOR sind wie folgt.

Eingang 1 Eingang 2 UND ODER XOR
1 1 1 1 0
1 0 0 1 1
0 1 0 1 1
0 0 0 0 0

Bitweise Operationen mit ganzen Zahlen

Bitweise Operationen mit ganzen Zahlen werden behandelt, als ob die Werte im Zweierkomplement wiedergegeben würden.

Beachten Sie jedoch, dass beim Konvertieren einer negativen Ganzzahl in eine binäre Zeichenfolge mit bin() oder format() anstelle des Zweierkomplementformats ein Minuszeichen verwendet WIRD.

If SIE Eine Zeichenfolge in Zweierkomplementdarstellung erhalten möchten, nehmen SIE das bitweise UND & der maximale Anzahl von Ziffern, z. B. 0b1111 (= 0xf) für 4 Bit, 0xff für 8 Bit und 0xffff für 16 Bit.

x = -9

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

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

Bitweises NICHT, invertieren:~

Der Operator ~ ergibt die bitweise Umkehrung. Die bitweise Inversion von x ist definiert als -(x+1).

Betrachtet man den Eingangswert x als Zweierkomplement und alle Bits werden invertiert, so entspricht dies -(x+1).

Das Konvertieren von ~x in einen String führt nicht zu einem String mit invertierten Bits des ursprünglichen Werts.

x = 9  # 0b1001

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

Indem Sie sterben UND-Operation ausführen, um Eine Zeichenfolge aus Einer Zweierkomplementdarstellung zu erstellen, can SIE Eine Zeichenfolge mit invertierten Bits erhalten.

Um beispielsweise einen 4-stelligen Bit-invertierten String zu erhalten, geben SIE ’04b‘ mit format() an und füllen ihn mit Nullen auf.

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

Bitverschiebungen:<<, >>

Linksverschiebung und Rechtsverschiebung mit Operatoren <<, >>:

x = 9  # 0b1001

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

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

Bei Werten wird das Vorzeichenbit erweitert und verschoben, und die positiven und negativen Vorzeichen ändern sich nicht. Negative Werte gelten als unendlich 1 auf der linken Seite.

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

Es ist schwer zu verstehen, wenn Sie es sich als numerischen Wert vorstellen, also ist es besser, es sich als Zweierkomplement-String vorzustellen.