Bitweise XOR-Zuweisungs-Operator ^=

Der Bitweise-XOR-Zuweisungs-Operator verknüpft den Wert, der rechts des Operators steht mit dem Wert der links des Operator stehenden Variablen mittels dem bitweisen-XOR-Operator und speichert das Resultat zurück in die Variable.












01001001100101100000001011010010
00111010110111100110100010110001

01110011010010000110101001100011
#include <stdio.h>

void printbinary(int x){
  char str[33]; str[32] = '\0';
  int i = 32;
  while(i){i--; str[i] = (x & 1) + '0'; x>>=1;}
  printf("%s\n", str);
}

int main(){
  int a = 1234567890;
  printbinary(1234567890);
  printbinary(987654321);
  a ^= 987654321;
  printbinary(a);
}

Details

Der Bitweise-XOR-Zuweisungs-Operator erwartet links einen lvalue und rechts einen rvalue und wird von rechts nach links abgearbeitet. Der Rückgabewert ist in C ein rvalue: Der Wert des linken Operanden nach der Zuweisung. in C++ ist der Rückgabewert ein lvalue: Der (mittlerweile zugewiesene) linke Operand selbst.

Der Bitweise-XOR-Zuweisungs-Operator verhält sich genau gleich wie der Zuweisungsoperator, nur dass er eine zusätzliche XOR-Verknüpfung ausführt. Für Details über die Eigenschaften einer Bitweise-XOR-Zuweisung wird hier somit auf die Beschreibung des Zuweisungsoperators und des Bitweise-XOR-Operators verwiesen. Als zusätzliche Erläuterung des Bitweise-XOR-Zuweisungs-Operators im Bezug zum einfachen Zuweisungsoperator genügen folgende zwei Programmzeilen, welche absolut äquivalent sind:

a ^=      10;
a  = a ^ (10);

Die gesetzten runden Klammern deuten an, dass aufgrund der Operatoren-Rangordnung bei der Bitweise-XOR-Zuweisung genauso wie bei allen Zuweisungs-Operatoren der komplette rechte Teil nach den Gleichheitszeichen als EIN Operand ausgewertet wird.

Der Bitweise-XOR-Zuweisungs-Operator wird auch häufig für Masken verwendet.