Logisch NOT-Operator !

Der Logisch-NOT-Operator wandelt einen boolschen Wert in sein Gegenteil um: Aus false wird true und umgekehrt.






x is false
#include <stdio.h>

int main(){
  int x = 0;
  if( x){printf("x is true\n");}
  if(!x){printf("x is false\n");}
  return 0;
}

Details

Der Logisch-NOT-Operator erwartet einen Operanden als rvalue und wird von rechts nach links abgearbeitet. Der Rückgabewert ist ein rvalue, in C ein Integer-Typ, in C++ ein boolscher Typ.

Der Operator ist zulässig für boolsche Werte, Integer-Werte, Fliesskommawerte sowie Pointer. Zwar ist dieser Operator bereits in C verfügbar, jedoch sind der Typ bool sowie die Wahrheitswerte true und false erst ab C++ verfügbar. In C wird für den Wert false der Integer-Wert 0, für true ein Integer-Wert ungleich 0 (normalerweise 1) verwendet.

Der Rückgabewert des Operators kann nur entweder true oder false (oder die entsprechenden Integer-Werte in C) sein. Im Gegensatz dazu gibt der Bitweise-NOT-Operator stets einen Integer-Wert zurück.

Der Unterschied zwischen der logischen und der bitweisen Variante des NOT-Operators ist für Einsteiger in die Sprache manchmal schwer verständlich. Der Unterschied ist: Die logische Variante verändert 1-Bit-Werte, die bitweise Variante verändert alle Bits von Werten. 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 (beispielsweise bei der Anwendung des Operators auf den Wert -1) die beiden Operatoren dieselben Ergebnisse liefern, ist dies eine schwer aufzufindende Fehlerquelle, die manchmal einige Stunden Fehlersuche benötigt.