Die Vergleichs- und Logikoperatoren werden hauptsächlich in Verzweigungen und Programmschleifen eingesetzt, die später im Kurs noch behandelt werden. Beide Operatorgruppen liefern als Ergebnis der Operation die bool-Werte true oder false zurück.
|
|
Vor einem Vergleich von zwei Operanden werden bei unterschiedlichen Datentypen der Operanden diese stets auf einen gemeinsamen Datentyp konvertiert. Wie diese Konvertierung prinzipiell vonstatten geht, folgt noch.
Zum Vergleichen von Operanden (Werte) stehen folgende Vergleichsoperationen zur Verfügung:
Der Operator < vergleicht zwei Operanden auf kleiner.
| ergebnis = operand1 < operand2; |
Er liefert als Ergebnis true, wenn die Auswertung von operand1 einen kleineren Wert liefert wie die Auswertung von operand2. In allen anderen Fällen ist das Ergebnis false.
Der Operator > vergleicht zwei Operanden auf größer.
| ergebnis = operand1 > operand2; |
Er liefert als Ergebnis true, wenn die Auswertung von operand1 einen größeren Wert liefert wie die Auswertung von operand2. In allen anderen Fällen ist das Ergebnis false.
Der Operator == vergleicht zwei Operanden auf Gleichheit.
| ergebnis = operand1 == operand2; |
Er liefert als Ergebnis true, wenn die Auswertung von operand1 exakt den gleichen Wert liefert wie die Auswertung von operand2. In allen anderen Fällen ist das Ergebnis false.
|
|
Der Operator != vergleicht zwei Operanden auf Ungleichheit.
| ergebnis = operand1 != operand2; |
Er liefert als Ergebnis true, wenn die Auswertung von operand1 einen unterschiedlichen Wert liefert wie die Auswertung von operand2. In allen anderen Fällen ist das Ergebnis false.
Der Operator <= vergleicht zwei Operanden auf kleiner-gleich.
| ergebnis = operand1 <= operand2; |
Er liefert als Ergebnis true, wenn die Auswertung von operand1 einen kleineren oder den gleichen Wert liefert wie die Auswertung von operand2. In allen anderen Fällen ist das Ergebnis false.
Der Operator >= vergleicht zwei Operanden auf größer-gleich.
| ergebnis = operand1 >= operand2; |
Er liefert als Ergebnis true, wenn die Auswertung von operand1 einen größeren oder den gleichen Wert liefert wie die Auswertung von operand2. In allen anderen Fällen ist das Ergebnis false.
Da es auch unter C++ nicht möglich ist, Äpfel mit Birnen zu vergleichen, werden vor einem Vergleich die beiden Operanden bei ungleichen Datentypen auf einen gemeinsamen Datentyp konvertiert. Ohne auf die genaue Konvertierung näher einzugehen, wird in der Regel der kleinere Datentyp an den größeren angepasst. Hierdurch kann es unter Umständen zu nicht beabsichtigten 'Nebeneffekten' kommen. Sehen Sie sich dazu einmal das Beispiel an.
| Anweisungen: char var = 0x80; .... bool res = (var == 0x80); Ergebnis: res ist false!! Die Variable var wird zuerst vorzeichenrichtig auf den Typ int konvertiert und damit ergibt sich folgender Vergleich: 0x00000080 == 0xFFFFFF80 oder in dezimal: 128 == -80 |
Hier wird versucht, eine char-Variable mit dem int-Literal 0x80 zu vergleichen. 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 char-Wert der Variable vor dem Vergleich auf einen int-Wert konvertiert. Und diese Konvertierung erfolgt unter Beachtung des Vorzeichens des char-Werts. Da alle char-Werte größer/gleich 0x80 negativ sind (7. Bit ist Vorzeichenbit!), ergibt sich dann der oben dargestellte Vergleich.
Ferner sollten Sie beim Vergleichen von Gleitkommazahlen den folgenden Satz niemals vergessen:
|
|
Beim Rechnen mit Gleitkommazahlen müssen Sie immer mit eventuellen Rundungsfehlern rechnen. So kann die Auswertung des Ausdrucks (1.1 / 3.) ein anderes Ergebnis liefern wie (22. / (3. * 20.)).
Zum Verknüpfen von mehreren Bedingung (in der Regel sind dies Ergebnisse von Vergleichsoperationen) stehen folgende Operatoren zur Verfügung:
Der logische UND-Operator besitzt das Symbol && und hat folgende Syntax:
| ergebnis = operand1 && operand2; |
Er liefert als Ergebnis true, wenn die Auswertung von operand1 und operand2 den 'Wert' true ergibt. In allen anderen Fällen ist das Ergebnis false.
Der logische ODER-Operator besitzt das Symbol || und hat folgende Syntax:
| ergebnis = operand1 || operand2; |
Er liefert als Ergebnis true, wenn die Auswertung von operand1 oder operand2 den 'Wert' true ergibt. In allen anderen Fällen ist das Ergebnis false.
Der logische NOT-Operator besitzt das Symbol ! (Ausrufungszeichen) und hat folgende Syntax:
| ergebnis = !operand; |
Er liefert als Ergebnis true, wenn die Auswertung von operand false liefert und false wenn operand gleich true ist.
|
operand1 | operand2 als Ergebnis eine Bitkombination aus den beiden Operanden (Veroderung), während die Auswertung des Ausdrucks operand1 || operand2 ein boolsches Ergebnis (true oder false) liefert, je nachdem ob mindestens einer der Operanden true als Ergebnis besitzt. |
Die Anzahl der Operanden, die Sie in einer Anweisung mit den Logikoperatoren verknüpfen können, ist nicht begrenzt, d.h Sie können beliebig viele Operanden verketten.
| ergebnis = operand1 && operand2 || operand3 && operand4; |
Jedoch sollten Sie aus Gründen der Übersichtlichkeit nicht all zu viele Operanden in einer Anweisung verketten. In welcher Reihenfolge ein solcher Ausdruck ausgewertet wird, das erfahren Sie in der nächsten Lektion.
Ein Beispiel oder eine Übung entfällt in dieser Lektion, da die Vergleichs- und Logikoperationen erst im Zusammenspiel mit Verzweigungen Sinn machen.