C Bitweise Operatoren: UND-, ODER-, XOR-, Komplement- und Verschiebungsoperationen

In diesem Tutorial lernen Sie anhand von Beispielen alle 6 bitweisen Operatoren in der C-Programmierung kennen.

In der arithmetisch-logischen Einheit (die sich innerhalb der CPU befindet) werden mathematische Operationen wie Addition, Subtraktion, Multiplikation und Division auf Bitebene ausgeführt. Um Operationen auf Bitebene in der C-Programmierung auszuführen, werden bitweise Operatoren verwendet.

Betreiber Bedeutung der Operatoren
& Bitweises UND
| Bitweises ODER
^ Bitweises XOR
~ Bitweise Ergänzung
<< Nach links verschieben
>> Nach rechts verschieben

Bitweiser UND-Operator &

Die Ausgabe von bitweisem UND ist 1, wenn die entsprechenden Bits von zwei Operanden 1 sind. Wenn eines der Bits eines Operanden 0 ist, wird das Ergebnis des entsprechenden Bits mit 0 ausgewertet.

Nehmen wir die bitweise UND-Verknüpfung zweier Ganzzahlen 12 und 25 an.

 12 = 00001100 (binär) 25 = 00011001 (binär) Bitbetrieb von 12 und 25 00001100 & 00011001 ________ 00001000 = 8 (dezimal)

Beispiel 1: Bitweises UND

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a&b); return 0; ) 

Ausgabe

 Ausgabe = 8

Bitweiser ODER-Operator |

Die Ausgabe von bitweisem ODER ist 1, wenn mindestens ein entsprechendes Bit von zwei Operanden 1 ist. In der C-Programmierung wird der bitweise ODER-Operator mit | bezeichnet.

12 = 00001100 (binär) 25 = 00011001 (binär) Bitweise ODER Betrieb von 12 und 25 00001100 | 00011001 ________ 00011101 = 29 (dezimal)

Beispiel 2: Bitweises ODER

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a|b); return 0; ) 

Ausgabe

 Ausgabe = 29

Bitweiser XOR-Operator (exklusives ODER) ^

Das Ergebnis des bitweisen XOR-Operators ist 1, wenn die entsprechenden Bits zweier Operanden entgegengesetzt sind. Es wird mit bezeichnet.

 12 = 00001100 (binär) 25 = 00011001 (binär) Bitweiser XOR-Betrieb von 12 und 25 00001100 00011001 ________ 00010101 = 21 (dezimal)

Beispiel 3: Bitweises XOR

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a^b); return 0; )

Ausgabe

 Ausgabe = 21

Bitweiser Komplementoperator ~

Der bitweise Komplimentoperator ist ein unärer Operator (funktioniert nur mit einem Operanden). Es ändert sich 1 zu 0 und 0 zu 1. Es wird mit ~ bezeichnet.

 35 = 00100011 (binär) Bitweises Komplement Operation von 35 ~ 00100011 ________ 11011100 = 220 (dezimal) 

Drehen Sie den bitweisen Komplementoperator in der C-Programmierung ein

Das bitweise Komplement von 35 (~ 35) ist -36 statt 220, aber warum?

Für jede ganze Zahl n ist das bitweise Komplement von n -(n+1). Um dies zu verstehen, sollten Sie das Komplement von 2 kennen.

2's Komplement

Das Zweierkomplement ist eine Operation mit Binärzahlen. Das Zweierkomplement einer Zahl ist gleich dem Komplement dieser Zahl plus 1. Zum Beispiel:

 Dezimales binäres 2-Komplement 0 00000000 - (11111111 + 1) = -00000000 = -0 (dezimal) 1 00000001 - (11111110 + 1) = -11111111 = -256 (dezimal) 12 00001100 - (11110011 + 1) = -11110100 = -244 (dezimal) 220 11011100 - (00100011 + 1) = -00100100 = -36 (dezimal) Hinweis: Der Überlauf wird bei der Berechnung des 2er-Komplements ignoriert. 

Das bitweise Komplement von 35 ist 220 (dezimal). Das 2er-Komplement von 220 ist -36. Daher ist die Ausgabe -36 anstelle von 220.

Das bitweise Komplement einer beliebigen Zahl N ist - (N + 1). Hier ist wie:

 bitweises Komplement von N = ~ N (dargestellt in der 2er-Komplementform) 2'-Komplement von ~ N = - (~ (~ N) +1) = - (N + 1) 

Beispiel 4: Bitweises Komplement

 #include int main() ( printf("Output = %d",~35); printf("Output = %d",~-12); return 0; ) 

Ausgabe

 Ausgabe = -36 Ausgabe = 11

Schichtoperatoren in der C-Programmierung

There are two shift operators in C programming:

  • Right shift operator
  • Left shift operator.

Right Shift Operator

Right shift operator shifts all bits towards right by certain number of specified bits. It is denoted by>>.

 212 = 11010100 (In binary) 212>>2 = 00110101 (In binary) (Right shift by two bits) 212>>7 = 00000001 (In binary) 212>>8 = 00000000 212>>0 = 11010100 (No Shift) 

Left Shift Operator

Left shift operator shifts all bits towards left by a certain number of specified bits. The bit positions that have been vacated by the left shift operator are filled with 0. The symbol of the left shift operator is <<.

 212 = 11010100 (In binary) 212<<1 = 110101000 (In binary) (Left shift by one bit) 212<<0 = 11010100 (Shift by 0) 212<<4 = 110101000000 (In binary) =3392(In decimal)

Example #5: Shift Operators

 #include int main() ( int num=212, i; for (i=0; i>i); printf(""); for (i=0; i<=2; ++i) printf("Left shift by %d: %d", i, num< 
 Right Shift by 0: 212 Right Shift by 1: 106 Right Shift by 2: 53 Left Shift by 0: 212 Left Shift by 1: 424 Left Shift by 2: 848 

Interessante Beiträge...