Bitweise OR-Operator |

Der Bitweise-OR-Operator verknüpft alle Bits zweier Integer-Werte nach den Regeln des logischen OR: 0 OR 0 ergibt 0 und alle anderen Kombinationen ergeben 1.













01001001100101100000001011010010
00111010110111100110100010110001
01111011110111100110101011110011
#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 x = 1234567890;
  int y = 987654321;
  printbinary(x);
  printbinary(y);
  printbinary(x | y);
  return 0;
}

Details

Der Bitweise-OR-Operator erwartet zwei Operanden als rvalues und wird von links nach rechts abgearbeitet. Der Rückgabewert ist ein rvalue, der stets ein Integer-Typ ist.

Der Bitweise-OR-Operator ist nur für Integer-Werte zulässig. Unter C++ ist zusätzlich auch die Anwendung des Operators auf boolsche Werte erlaubt, welche jedoch vor Anwendung des Operators in einen int umgewandelt werden.

Der Unterschied zwischen der bitweisen und der logischen Variante des OR-Operators ist für Einsteiger in die Sprache manchmal schwer verständlich. Der Unterschied ist: Die bitweise Variante verknüpft mehrere Bits von Werten, die logische Variante verknüpft 1-Bit-Werte. Selbst nach mehreren Jahren Erfahrung kommt es vor, dass aufgrund der ähnlichen Schreibweise (| oder ||) aus Versehen und ohne es zu merken der falsche Operator verwendet wird. Da zudem in gewissen Fällen die beiden Operatoren dieselben Ergebnisse liefern, ist dies eine schwer aufzufindende Fehlerquelle, die manchmal einige Stunden Fehlersuche benötigt.

Der Bitweise-OR-Operator wird häufig für Masken verwendet.