Lektion 45:

Ausdrücke und Operatoren

Sie kennen bereits einige arithmetische und logische Ausdrücke. Die einfachsten Ausdrücke sind Konstanten und Variablennamen.

Ausdruck: Wert:
5         5
true      true
x         der Wert, der in der Variablen x steht

 Mit Operatoren und Klammern können aus einfachen Ausdrücken komplexere Ausdrücke gebaut werden.

Ausdruck: Wert:
5+5       10
5+5*5     30
(5+5)*5   50
10==5+5   true

 Das waren jetzt zweistellige Operatoren. Das bedeutet, daß zu jedem Operator zwei Ausdrücke gehören. Es gibt auch einstellige Operatoren, wie das - als Vorzeichen oder das ! in logischen Ausdrücken.

Ausdruck: Wert:
5         5
-5        -5
-(-5)     5
!true     false

Die bisher genannten Ausdrücke hatten nur den einen Effekt, daß ihr Wert berechnet wird. Es gibt aber auch Ausdrücke, die einen Seiteneffekt haben.

Ausdruck: Wert:        Seiteneffekt
x=5       das neue x   x bekommt den Wert 5
x=x+1     das neue x   x wird um ein erhöht
cout<<5   cout         5 wird auf den Bildschirm ausgegeben

Weil Zuweisungen der Art

a=a+b

sehr häufig vorkommen, gibt es für sie eine abkürzende Schreibweise:

a+=b

macht dasselbe wie

a=a+b

Und für die noch häufigere Zuweisung der Art

a=a+1 bzw. a=a-1

gibt es noch die Schreibweise

++a bzw. --a
Ausdruck: Wert:              Seiteneffekt
a+=5      das neue a         a wird um 5 erhöht
++a       das neue a         a wird um eins erhöht

 Soweit zu den eher brauchbaren Operatoren. Der Vollständigkeit halber seien hier auch noch Operatoren erwähnt, die Sie nach Möglichkeit nicht verwenden sollten, darunter auch ein dreistelliger Operator.

Ausdruck: Wert:              Seiteneffekt
a++       das ALTE a         a wird um eins erhöht
a--       das ALTE a         a wird um eins erniedrigt
a,b       b                  keiner
a?b:c     b wenn a==true     keiner
          c wenn a==false    keiner

Es gibt Operatoren, die ihre Teilausdrücke von links nach rechts auswerten und solche, die von rechts nach links auswerten(Operator, Auswertungsrichtung).

Ausdruck: Ausdruck vollständig geklammert:
a+b+c+d   ((a+b)+c)+d
a=b=c=d   a=(b=(c=d))

 Außerdem haben alle Operatoren eine bestimmte Priorität. Innerhalb eines Ausdrucks werden (soweit nicht durch Klammern anders vorgeschrieben) immer zuerst alle Operatoren der höchsten Priorität ausgeführt, dann die der nächst niedrigeren, usw.

Ausdruck: Ausdruck vollständig geklammert:
a+b*c     a+(b*c)
2*3+4*5   (2*3)+(4*5)
a=b+c     a=(b+c)
a=b*(c=5) a=(b*(c=5))

Als Merkregel für die Prioritäten der Operatoren reicht es, wenn Sie davon ausgehen, daß die offensichtlichen Zusammenhänge vom Compiler beachtet werden, z.B. Punkt- vor Strichrechnung und Zuweisungen und Vergleiche zuletzt.

Zur Richtung der Operatoren gilt, daß die Zuweisungsoperatoren von rechts nach links auswerten, während alle anderen Operatoren von links nach rechts auswerten.

Falls Sie sich mal unsicher sind, wie die Prioritäten der Operatoren sind, dann setzen Sie einfach Klammern! Der Code wird dann sowohl für Sie als auch für andere Programmierer leichter zu lesen sein. Die Prioritäten der Operatoren sind nämlich zum Teil recht willkürlich gewählt worden, und keiner kann erwarten, daß man sie alle kennt.

Eine vollständige Liste der Operatoren und deren Prioritäten und Auswertungsreihenfolgen können Sie der Dokumentation Ihres Compilers entnehmen. Sie werden diese Liste vermutlich unter "precedence of operators" finden.

Es wird aber bis auf weiteres kein Bedarf bestehen, dort nachzusehen, denn ganz allgemein sollten Sie ja bestrebt sein, Ihre Ausdrücke so einfach wie möglich zu halten.



Falls Ihnen Fehler im Text auffallen oder Sie Verbesserungsvorschläge haben, dann schicken Sie mir bitte eine Mail. Ich werde mich dann sofort darum kümmern.
[aktuelle Version] [inhalt] [index]      [Fehlerkorrektur, Verbesserungsvorschlag]

© Volkard Henkel <volkard@normannia.de>, last update: 08/25/00