C Bitweise Operatoren: AND, OR, XOR, Shift & Ergänzung (mit Beispiel)

Inhaltsverzeichnis:

Anonim

Was sind bitweise Operatoren?

BITWISE-BETREIBER werden zum Bearbeiten von Daten auf Bitebene verwendet, auch als Programmierung auf Bitebene bezeichnet. Bitweise arbeitet mit einem oder mehreren Bitmustern oder Binärzahlen auf der Ebene ihrer einzelnen Bits. Sie werden in numerischen Berechnungen verwendet, um den Berechnungsprozess zu beschleunigen.

Es folgt die Liste der bitweisen Operatoren, die von der Programmiersprache 'C' bereitgestellt werden:

Operator Bedeutung
& Bitweiser UND-Operator
| Bitweiser ODER-Operator
^ Bitweiser exklusiver ODER-Operator
~ Der Komplementoperator von Binary One ist ein unärer Operator
<< Linksschichtbetreiber
>> Rechtsschichtbetreiber

Bitweise Operatoren können nicht direkt auf primitive Datentypen wie float, double usw. angewendet werden. Denken Sie immer daran, dass bitweise Operatoren aufgrund ihrer Kompatibilität hauptsächlich mit dem ganzzahligen Datentyp verwendet werden.

Die bitweisen logischen Operatoren arbeiten Stück für Stück an den Daten, beginnend mit dem niedrigstwertigen Bit, dh dem LSB-Bit, das das Bit ganz rechts ist, und arbeiten auf das MSB (Most Significant Bit) zu, das das Bit ganz links ist.

Das Ergebnis der Berechnung bitweiser logischer Operatoren ist in der folgenden Tabelle dargestellt.

x y x & y x | y x y
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

In diesem Tutorial lernen Sie:

  • Was sind bitweise Operatoren?
  • Bitweises UND
  • Bitweises ODER
  • Bitweises exklusives ODER
  • Bitweise Verschiebungsoperatoren
  • Bitweiser Komplementoperator

Bitweises UND

Dies ist einer der am häufigsten verwendeten logischen bitweisen Operatoren. Es wird durch ein einzelnes kaufmännisches Und-Zeichen (&) dargestellt. Auf jeder Seite des Operators (&) werden zwei ganzzahlige Ausdrücke geschrieben.

Das Ergebnis der bitweisen UND-Verknüpfung ist 1, wenn beide Bits den Wert 1 haben. Andernfalls ist das Ergebnis immer 0.

Nehmen wir an, wir haben 2 Variablen op1 und op2 mit folgenden Werten:

Op1 = 0000 1101Op2 = 0001 1001

Das Ergebnis der UND-Verknüpfung für die Variablen op1 und op2 ist

Result = 0000 1001

Wie wir sehen können, werden zwei Variablen Stück für Stück verglichen. Immer wenn der Wert eines Bits in beiden Variablen 1 ist, ist das Ergebnis 1 oder 0.

Bitweises ODER

Es wird durch ein einzelnes vertikales Balkenzeichen (|) dargestellt. Auf jeder Seite des Operators (|) werden zwei ganzzahlige Ausdrücke geschrieben.

Das Ergebnis der bitweisen ODER-Verknüpfung ist 1, wenn mindestens einer der Ausdrücke den Wert 1 hat. Andernfalls ist das Ergebnis immer 0.

Nehmen wir an, wir haben 2 Variablen op1 und op2 mit folgenden Werten:

Op1 = 0000 1101Op2 = 0001 1001

Das Ergebnis der ODER-Verknüpfung für die Variablen op1 und op2 ist

Result = 0001 1101

Wie wir sehen können, werden zwei Variablen Stück für Stück verglichen. Immer wenn der Wert eines Bits in einer der Variablen 1 ist, ist das Ergebnis 1 oder 0.

Bitweises exklusives ODER

Es wird durch ein Symbol (^) dargestellt. Auf jeder Seite des Operators (^) werden zwei ganzzahlige Ausdrücke geschrieben.

Das Ergebnis der bitweisen Exklusiv-ODER-Operation ist 1, wenn nur einer der Ausdrücke den Wert 1 hat. Andernfalls ist das Ergebnis immer 0.

Nehmen wir an, wir haben 2 Variablen op1 und op2 mit folgenden Werten:

Op1 = 0000 1101Op2 = 0001 1001

Das Ergebnis der ODER-Verknüpfung für die Variablen op1 und op2 ist

Result = 0001 0100

Wie wir sehen können, werden zwei Variablen Stück für Stück verglichen. Immer wenn nur eine Variable den Wert 1 enthält, ist das Ergebnis 0, andernfalls ist 0 das Ergebnis.

Schreiben wir ein einfaches Programm, das bitweise logische Operatoren demonstriert.

#include int main(){int a = 20; /* 20 = 010100 */int b = 21; /* 21 = 010101 */int c = 0;c = a & b; /* 20 = 010100 */printf("AND - Value of c is %d\n", c );c = a | b; /* 21 = 010101 */printf("OR - Value of c is %d\n", c );c = a b; /* 1 = 0001 */printf("Exclusive-OR - Value of c is %d\n", c );getch();}

Ausgabe:

AND - Value of c is 20OR - Value of c is 21Exclusive-OR - Value of c is 1

Bitweise Verschiebungsoperatoren

Die bitweisen Verschiebungsoperatoren werden verwendet, um die Bitmuster entweder nach links oder nach rechts zu verschieben. Links und rechts sind zwei von 'C' bereitgestellte Schichtoperatoren, die wie folgt dargestellt werden:

Operand << n (Left Shift)Operand >> n (Right Shift)

Hier,

  • Ein Operand ist ein ganzzahliger Ausdruck, für den wir die Verschiebungsoperation ausführen müssen.
  • 'n' ist die Gesamtzahl der Bitpositionen, die wir im ganzzahligen Ausdruck verschieben müssen.

Die Linksverschiebungsoperation verschiebt die 'n' Anzahl von Bits nach links. Die am weitesten links stehenden Bits im Ausdruck werden herausgesprungen, und n Bits mit dem Wert 0 werden auf der rechten Seite gefüllt.

Die Rechtsverschiebungsoperation verschiebt die 'n' Anzahl von Bits nach rechts. Die am weitesten rechts stehenden 'n' Bits im Ausdruck werden herausgesprungen und der Wert 0 wird auf der linken Seite ausgefüllt.

Beispiel: x ist ein ganzzahliger Ausdruck mit Daten 1111. Nach dem Ausführen der Verschiebungsoperation lautet das Ergebnis:

x << 2 (left shift) = 1111<<2 = 1100x>>2 (right shift) = 1111>>2 = 0011

Verschiebungsoperatoren können kombiniert und dann zum Extrahieren der Daten aus dem ganzzahligen Ausdruck verwendet werden. Schreiben wir ein Programm, um die Verwendung von bitweisen Verschiebungsoperatoren zu demonstrieren.

#include int main() {int a = 20; /* 20 = 010100 */int c = 0;c = a << 2; /* 80 = 101000 */printf("Left shift - Value of c is %d\n", c );c = a >> 2; /*05 = 000101 */printf("Right shift - Value of c is %d\n", c );return 0;}

Ausgabe:

Left shift - Value of c is 80Right shift - Value of c is 5

Nach dem Ausführen der Linksverschiebungsoperation wird der Wert 80, dessen binäres Äquivalent 101000 ist.

Nach dem Ausführen der Rechtsverschiebungsoperation wird der Wert 5, dessen binäres Äquivalent 000101 ist.

Bitweiser Komplementoperator

Das bitweise Komplement wird auch als Komplementoperator bezeichnet, da es immer nur einen Wert oder einen Operanden annimmt. Es ist ein unärer Operator.

Wenn wir ein Komplement für ein Bit ausführen, werden alle Einsen zu Nullen und umgekehrt.

Wenn wir einen ganzzahligen Ausdruck haben, der 0000 1111 enthält, wird der Wert nach dem Ausführen einer bitweisen Komplementoperation 1111 0000.

Der bitweise Komplementoperator wird mit der Symboltilde (~) bezeichnet.

Schreiben wir ein Programm, das die Implementierung des bitweisen Komplementoperators demonstriert.

#include int main() {int a = 10; /* 10 = 1010 */int c = 0;c = ~(a);printf("Complement - Value of c is %d\n", c );return 0;}

Ausgabe:

Complement - Value of c is -11

Hier ist ein weiteres Programm mit einem Beispiel für alle bisher besprochenen Kartoffeln:

#include main() {unsigned int x = 48; /* 48 = 0011 0000 */unsigned int y = 13; /* 13 = 0000 1101 */int z = 0;z =x & y; /* 0 = 0000 0000 */printf("Bitwise AND Operator - x & y = %d\n", z );z = x | y; /* 61 = 0011 1101 */printf("Bitwise OR Operator - x | y = %d\n", z );z= x^y; /* 61 = 0011 1101 */printf("Bitwise XOR Operator- x^y= %d\n", z);z = ~x; /*-61 = 1100 0011 */printf("Bitwise One's Complement Operator - ~x = %d\n", z);z = x << 2; /* 192 = 1100 0000 */printf("Bitwise Left Shift Operator x << 2= %d\n", z );z= x >> 2; /* 12 = 0000 1100 */printf ("Bitwise Right Shift Operator x >> 2= %d\n", z );}

Nachdem wir das Programm kompiliert und ausgeführt haben, führt es zu folgendem Ergebnis:

Bitwise AND Operator - x & y = 0Bitwise OR Operator - x | y = 61Bitwise XOR Operator- x^y= 61Bitwise One's Complement Operator - ~x = -49Bitwise Left Shift Operator x << 2= 192Bitwise Right Shift Operator x >> 2= 12

Zusammenfassung

  • Bitweise Operatoren sind spezielle Operatorsätze, die von 'C' bereitgestellt werden.
  • Sie werden in der Bit-Level-Programmierung verwendet.
  • Diese Operatoren werden verwendet, um Bits eines ganzzahligen Ausdrucks zu bearbeiten.
  • Logisch, Verschiebung und Komplement sind drei Arten von bitweisen Operatoren.
  • Der bitweise Komplementoperator wird verwendet, um die Bits eines Ausdrucks umzukehren.