Operatoren zur Bitmanipulation


Zu den Operatoren gehören:

& AND (log. UND)
&= AND (log. UND)
| OR (log. ODER)
|= OR (log. ODER)
^ XOR (log. Exclusiv-ODER)
~ one's compliment (Einerkomplement)
<< Shift Left (Linksschieben)
>> Shift Right (Rechtsschieben)
<<= Shift Left (Linksschieben)
>>= Shift Right (Rechtsschieben)

AND OR und XOR

Diese Operationen erfordern zwei Operanden und führen Bit-Vergleiche durch.

AND & kopiert ein Bit zum Ergebnis, wenn es in beiden Operanden gesetzt ist.

  
  main()
  {
    unsigned int a = 60;	/* 60 = 0011 1100 */  
    unsigned int b = 13;	/* 13 = 0000 1101 */
    unsigned int c = 0;           

    c = a & b;                  /* 12 = 0000 1100 */ 
  }

OR | kopiert ein Bit zum Ergebnis, wenn es in mind. einem Operand gesetzt ist.

  
  main()
  {
    unsigned int a = 60;	/* 60 = 0011 1100 */  
    unsigned int b = 13;	/* 13 = 0000 1101 */
    unsigned int c = 0;           

    c = a | b;                  /* 61 = 0011 1101 */ 
  }

XOR ^ kopiert ein Bit zum Ergebnis, wenn es in einem (aber nicht beiden!) Operand gesetzt ist.

  
  main()
  {
    unsigned int a = 60;	/* 60 = 0011 1100 */  
    unsigned int b = 13;	/* 13 = 0000 1101 */
    unsigned int c = 0;           

    c = a ^ b;                  /* 49 = 0011 0001 */ 
  }


Einerkomplement

Dieser Operator ist monadisch (d.h. er benötigt nur einen Operand) und invertiert bitweise (0->1, 1->0).


  main()
  {
    unsigned int Value=4;          /*   4 = 0000 0100 */  

    Value = ~ Value;               /* 251 = 1111 1011 */  

  }



Bitweise Verschiebung.

Die folgenden Operatoren werden verwendet, um Bits nach links oder nach rechts zu verschieben.

<< >> <<= >>=

Der Wert des linken Operanden wird um die Anzahl an Bitstellen nach links bzw. nach rechts verschoben, die im rechten Operanden festgelegt wird. Zum Beispiel:


  main()
  {
    unsigned int Value=4;          /*  4 = 0000 0100 */  
    unsigned int Shift=2;

    Value = Value << Shift; /* 16="0001" 0000 */ Value <<="Shift;" /* 64="0100" 0000 */ printf("%d\n", Value); /* Prints 64 */ } 

Das dabei entstehende 'leere' Bit wird auf 0 gesetzt. Verwenden Sie den Datentyp unsigned wenn Sie mit diesen Operatoren arbeiten, um unvorhersehbare Ergebnisse zu vermeiden.


Beispiele:

AND OR Bitweise Verschiebung.


Aufgaben:

Aufgaben zum bitweisen Verschieben.


Siehe auch:

weitere Ausdrücke und Operatoren.
Rangfolge der Operatoren.
Ergibtanweisungen.


Anfang Hauptindex Schlüsselwörter Funktionen

Übers.: G. Junghanns