C++ Tutorial

Vergleichs- und Logikoperationen

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.

Vergleichsoperationen

Folgende Vergleichsoperationen stehen zur Verfügung:

Operator
Syntax
Ergebnis
<
EXP1 < EXP2;
true, wenn Ergebnis von Ausdruck EXP1 kleiner als Ergebnis von Ausdruck EXP2
>
EXP1 > EXP2;
true, wenn Ergebnis von Ausdruck EXP1 größer als Ergebnis von Ausdruck EXP2
==
EXP1 == EXP2;
true, wenn Ergebnis von Ausdruck EXP1 gleich Ergebnis von Ausdruck EXP2
!=
EXP1 != EXP2;
true, wenn Ergebnis von Ausdruck EXP1 ungleich Ergebnis von Ausdruck EXP2
<=
EXP1 <= EXP2;
true, wenn Ergebnis von Ausdruck EXP1 kleiner oder gleich Ergebnis von Ausdruck EXP2
>=
EXP1 >= EXP2;
true, wenn Ergebnis von Ausdruck EXP1 größer oder gleich Ergebnis von Ausdruck EXP2

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.

Logikoperationen

Zum Verknüpfen von Bedingungen (in der Regel sind dies Ergebnisse von Vergleichsoperationen) stehen folgende Operatoren zur Verfügung:

Operator
Syntax
Ergebnis
&&
EXP1 && EXP2;
true, wenn Ergebnis von Ausdruck EXP1 und EXP2 gleich true
||
EXP1 || EXP2;
true, wenn Ergebnis von Ausdruck EXP1 oder EXP2 gleich true
!
!EXP
true, wenn Ergebnis von Ausdruck EXP false 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.

Anpassung der Datentypen der Operanden

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