Die Vergleichs- und Logikoperatoren werden hauptsächlich in Verzweigungen und Programmschleifen eingesetzt, die später behandelt werden. Beide Operatorgruppen liefern als Ergebnis den bool-Wert true oder false zurück.
Folgende Vergleichsoperationen stehen zur Verfügung:
Außer den aufgeführten Vergleichsoperatoren gibt es den 3-Wege-Vergleichsoperator <=>, auch spaceship-Operator genannt. Da dieser Operand nur im Zusammenhang mit Objekten sinnvoll ist, wird er im Kapitel Allgemeines Überladen von Operatoren behandelt.
Zum Verknüpfen von Bedingungen (in der Regel sind dies Ergebnisse von Vergleichsoperationen) stehen folgende Operatoren zur Verfügung:
EXP1 | EXP2
als Ergebnis eine Bitkombination aus den beiden Operanden (Veroderung), während die Auswertung des Ausdrucks
EXP1 || EXP2
ein boolsches Ergebnis (true oder false) liefert, je nachdem, ob mindestens eine der Bedingungen true ist.
Die Anzahl der Ausdrücke, die in einer Anweisung mit den Logikoperatoren verknüpft werden können, ist nicht begrenzt.
ERG = OP1 && OP2 || OP3 && OP4;
Der Übersichtlichkeit wegen sollten nicht allzu viele Ausdrücke in einer Anweisung verknüpft werden. In welcher Reihenfolge eine solche Anweisung ausgewertet wird, d.h., ob die Und-Verknüpfung vor der Oder-Verknüpfung berechnet wird oder nicht, das ist Thema des nächsten Kapitels.
Sind die Datentypen der Operanden verschieden, werden sie auf einen gemeinsamen Datentyp konvertiert. Mehr dazu später im Kapitel Typkonvertierungen. Hierdurch kann es unter Umständen zu nicht beabsichtigten Nebeneffekten kommen. Sehen Sie sich einmal das Beispiel an.
Anweisung:
signed char var = 0x80;
bool res = (var == 0x80);
Ergebnis:
res ist false!!
Hier wird eine signed char-Variable mit dem Literal 0x80 verglichen. Obwohl dieser Vergleich auf den ersten Blick true als Ergebnis liefern sollte, ist das Ergebnis des Vergleichs false. Der Grund hierfür liegt darin, dass das Literal standardmäßig den Datentyp int besitzt. Und damit wird der signed char-Wert der Variable vor dem Vergleich auf einen int-Wert konvertiert. Und diese Konvertierung erfolgt unter Beachtung des Vorzeichens des signed char-Werts. Da alle signed char-Werte größer/gleich 0x80 negativ sind (7. Bit ist Vorzeichenbit!), ergibt sich folgender Vergleich:
0xFFFFFF80 == 0x00000080
oder in dezimal:
-80 == 128
Ferner sollten Sie beim Vergleichen von Gleitkomma-Daten den folgenden Satz niemals vergessen:
Copyright 2024 © Wolfgang Schröder
E-Mail mit Fragen oder Kommentaren zu dieser Website an: info@cpp-tutor.de
Impressum & Datenschutz