|
< | kleiner | <= | kleiner gleich | > | größer | >= | größer gleich | == | gleich (identisch) | != | ungleich |
Die ersten vier haben untereinander gleichen Rang, stehen aber eineRangstufe höher als die beiden letzten. Es gibt in C grundsätzlichkeinen Datentyp BOOLEAN; WAHR oder FALSCH werden einfach überden numerischen Integer-Wert entschieden. Dabei gilt:
ungleich 0 | WAHR (erhält den Wert eins) | gleich 0 | FALSCH (Wert 0) |
Arbeitet man in einem Programm viel mit diesen Werten, kann man folgende Konstantendefinitionen zu benutzen: #define FALSE0 #define TRUE ! FALSE
Beispiele für die Verwendung dieser Operatoren:
int a=5;
int b=12;
int c=7;
a < b /* WAHR */
b < c /* FALSCH */
a+c <= b /* WAHR */
b-a >= c /* WAHR */
a == b /* FALSCH */
a+c == b /* WAHR */
a != b /* WAHR */
a = b<c; /* möglich: a=0 */
a = c<b; /* -"- a=1 */
Wie schon erwähnt, bindet die Zuweisung schwächer als andere Operatoren
(arithmetische oder Vergleichs-Operatoren). Daher sollte man Zuweisungen, die in
Ausdrücken stehen, zur Sicherheit klammern. Dazu einige Beispiele:
if (x = y)
tuwas();
Die Anweisung besagt nicht: "Wenn x gleich y ist, dann tuwas();", sondern
"x erhalte den Wert y; Wenn das Ergebnis der Operation (x = y) ungleich Null ist,
dann tuwas();". Es gibt also zwei Möglichkeiten:
- Es soll wirklich x mit y verglichen werden. Dann darf nicht "=" stehen, sondern
der Vergleichsoperator "==". Solche Flüchtigkeitsfehler kommen oft vor.
if (x == y) /* Vergleich x == y (doppeltes Gleichheitszeichen) */
tuwas();
- Es soll tatsächlich die Zuweisung x = y erfolgen und abhängig vom Wert
der Variablen x bzw. y verzweigt werden. Dann ist zwar if (x = y) richtig,
aber der Deutlichkeit halber sollte man schreiben:
if ((x = y) != 0)
tuwas();
Die Klammerung von (x = y) ist notwendig, da der Vergleichoperator stärker
bindet als die Zuweisung. Fehlt die Klammer, wäre das schon wieder ein schwer zu
findender Fehler. x = y != 0 bedeutet: x = (y !=0). x hätte
nachher nicht den Wert von y, sondern 0 oder 1.
|
|
|