Logisch NOT-Operator !
Der Logisch-NOT-Operator wandelt einen boolschen Wert in sein Gegenteil um: Aus false
wird true
und umgekehrt.
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.