Shift-Left-Zuweisungs-Operator <<=

Der Shift-Left-Zuweisungs-Operator verschiebt die Bits der Variablen, die links des Operators steht um die rechts des Operator stehende Anzahl Stellen nach links und speichert das Resultat zurück in die Variable.












01001001100101100000001011010010

00100110010110000000101101001000
#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(a);
  a <<= 2;
  printbinary(a);
}

Details

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

a <<=       2;
a   = a << (2);

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