Die nächste Klasse an Operatoren sind die logischen
Operatoren. Dabei werden Integerzahlen als wahrer Wert interpretiert,
wenn sie ungleich Null sind, als falscher Wert sonst. Das Ergebnis
ist 1 falls wahr, 0 falls falsch. Auch hier ist eine Anwendung auf
Fließkommazahlen möglich, aber nicht sinnvoll.
Operator |
Int |
Float |
Operation |
Beispiel |
Ergebnis |
---|---|---|---|---|---|
&& |
X |
|
Logisches UND |
i&&j |
1, wenn i und j ungleich 0, 0 sonst |
|| |
X |
|
Logisches ODER |
a||b |
0 wenn a und b gleich 0, 1 sonst |
! |
X |
|
Logisches NOT (Negation) |
!q |
1 wenn q gleich 0, 0 sonst |
Da logische Werte in C++ nichts anderes sind als Integerzahlen, kann man mit ihnen auch rechnen. Dabei kann man z.B. folgenden Trick nutzen:
a = 5 + !!b * 7;
Dieser Ausdruck weist a den Wert 5 oder 12 zu, je nachdem
ob b Null ist oder nicht (falls b nicht Null, ist
!b Null und !0 ist 1). Man sollte sich
allerdings im klaren darüber sein, daß solche Tricks der
Lesbarkeit des Programms schaden.
Auch ist es wichtig, immer
zwischen den bitweisen und den logischen Operatoren zu unterscheiden.
Besonders die beiden UND und ODER werden sehr leicht verwechselt, was
besonders schlimm sein kann, wenn es eine Zeitlang richtig
funktioniert. Das kann nämlich dann passieren, wenn
Wahrheitswerte wirklich nur durch 0 und 1 dargestellt werden. Dann
unterscheiden sich die bitweisen und die logischen Operationen nicht.
Doch sobald andere Werte genutzt werden, treten Fehler auf, die im
Nachhinein sehr schwer zu finden sein können.