Was sind bitweise Operatoren?
In einem Computerprogramm sind bitweise Operatoren Operatoren zum Manipulieren von Bitmustern in Ausdrücken. Bitweises UND, ODER, exklusives ODER (XOR), NICHT, Rechtsverschiebung und Linksverschiebung sind übliche Operationen. Die meisten Computerprogrammiersprachen enthalten alle sechs dieser Operatoren. Sie werden häufig zum Setzen, Löschen oder Umdrehen einzelner Bits in Programmen verwendet, die Computerhardware steuern. Bitweise Operatoren werden auch häufig in Datenverschlüsselungs- und Komprimierungsalgorithmen verwendet.
Die gebräuchlichen bitweisen Operatoren werden normalerweise in Programmiersprachen wie C, C ++ und Java symbolisch dargestellt. Sie werden in Ausdrücken genauso verwendet wie arithmetische Operatoren wie Plus- oder Minuszeichen. Der bitweise Operator AND wird mit dem kaufmännischen Und & , OR mit der Pipe | dargestellt und XOR mit dem Caret ^ . NOT, auch als Komplementoperator bekannt, ist mit einer Tilde ~ gekennzeichnet .
Der rechte Schichtführer verwendet ein nach rechts zeigendes Doppelkreuz >> . Im Gegensatz dazu wird die Linksverschiebung durch ein nach links zeigendes Doppel-Caret << angezeigt. Java enthält eine weitere Rechtsverschiebungsoperation, die mit einem nach rechts zeigenden Dreifach-Caret >>> dargestellt wird .
Bitweise Operatoren wenden eine logische Operation auf jedes Bitpaar in ihren Operanden an. NICHT, Rechtsverschiebung und Linksverschiebung haben nur einen wahren Operanden; Der zweite Wert bei Schiebeoperationen ist die Bitzahl. Um besser zu verstehen, wie bitweise Operatoren funktionieren, kann eine Person ihre Operanden als Binärzahlen visualisieren. Beispielsweise kippt der Komplementoperator jedes Bit seines einzelnen Operanden in den entgegengesetzten Zustand. Eine Eins wird zu einer Null und eine Null wird zu einer Eins. Das Komplement des 8-Bit-Binärwerts 00110101 ist 11001010.
Der AND-Operator hat zwei Operanden. Bit für Bit wird eine logische UND-Verknüpfung mit einem entsprechenden Bit von jedem Operanden durchgeführt. Das Ergebnis jeder Bitoperation wird an dieser Bitposition des Gesamtergebnisses platziert. Beispielsweise verarbeitet der AND-Operator das Bit 7 eines Operanden mit dem Bit 7 des anderen Operanden. Das Ergebnis wird in Bit 7 des Gesamtergebnisses gespeichert.
Bei einer UND-Operation müssen beide Operandenbits Eins sein, damit das Ergebnis Eins ist, andernfalls ist das Ergebnis Null. Wenn beispielsweise die 8-Bit-Binärwerte der Operanden 00110101 und 11110000 sind, lautet das Ergebnis 00110000. Der UND-Operator wird häufig verwendet, um bestimmte Bits im Ergebnis auf Null zu setzen. Dies erfolgt durch Platzieren von Nullen an diesen Bitpositionen in einem der Operanden.
Bei einer ODER-Verknüpfung müssen beide Operandenbits Nullen sein, damit das Ergebnis Null ist. Ansonsten ist das Ergebnis eins. Eine gebräuchliche Verwendung des OR-Operators besteht darin, bestimmte Bits des Ergebnisses auf Eins zu setzen. Dies erfolgt durch Platzieren von Einsen an diesen Bitpositionen in einem der Operanden. Für die XOR-Operation ist das Ergebnis Null, wenn beide Operandenbits Null sind oder wenn beide Operandenbits Eins sind - andernfalls ist das Ergebnis Eins.
Linksverschiebung und Rechtsverschiebung verschieben die Bits im Operanden um die angegebene Anzahl von Bitpositionen nach links oder rechts. Eine logische Verschiebung nach rechts verschiebt eine Null ganz nach links als Teil der Verschiebung. Eine arithmetische Rechtsverschiebung kopiert das Bit ganz links - das Vorzeichenbit - vor der Verschiebung in dieselbe Position nach der Verschiebung. Das ursprüngliche Bit wird ebenfalls zusammen mit dem Rest nach rechts verschoben. Bei beiden Arten der Linksverschiebung wird eine Null in das Bit ganz rechts verschoben.
Wenn ein Operand nach rechts verschoben wird, wird das Bit ganz rechts vor der Verschiebung einfach weggeworfen. In ähnlicher Weise wird das am weitesten links stehende Bit vor einer Linksverschiebung beseitigt. Es wird nicht um das andere Ende des Operanden gewickelt.
Bitweise Verschiebungsoperationen sind sprach- und implementierungsabhängig. In C und C ++ führen >> und << beispielsweise logische Verschiebungen durch, wenn der Operand eine ganze Zahl ohne Vorzeichen ist. Wenn der Operand eine Ganzzahl mit Vorzeichen ist, wird wahrscheinlich stattdessen eine arithmetische Verschiebung durchgeführt. In Java werden alle Operanden als vorzeichenbehaftet betrachtet, und arithmetische Verschiebungen werden immer mit >> und << ausgeführt . Der Operator >>> wird für eine logische Verschiebung nach rechts verwendet, es ist jedoch weiterhin möglich, versehentlich eine arithmetische Verschiebung nach rechts durchzuführen, ohne dass eine sorgfältige Typumwandlung erforderlich ist.
Komplikationen können auch auftreten, wenn Operanden unterschiedliche Bitlängen haben oder wenn einige signiert und andere nicht signiert sind. Bitweise Operatoren und numerische Konstanten in der Mitte eines komplexen Ausdrucks werden möglicherweise nicht wie erwartet ausgewertet. Es muss sorgfältig darauf geachtet werden, die Größe und die Vorzeichenfreiheit jeder Menge im Ausdruck anzugeben. Dies kann durch vorsichtiges Typumwandeln oder vorübergehende Zuweisungen zu bestimmten Variablentypen im Programmcode erfolgen.