Operatoren
 |
Die SDL Component Suite bietet eine riesige Menge an Komponenten und Routinen, die viele schwierige Anforderungen auf Knopfdruck lösen. Die Light-Version ist gratis! |
Arithmetische Operatoren
Arithmetische Operatoren verknüpfen zwei Werte (in Form von Konstanten oder Variablen) und liefern das entsprechende Resultat zurück. Wichtig ist, dass der Typ des Ergebnisses von den Eingangstypen und von der Operation abhängt. Für ganzzahlige Berechnungen gibt es zwei spezielle Operatoren, div und mod.
Operator |
Operation |
Eingangstypen |
Ergebnistyp |
+ |
Addition |
ganzzahlig, reell |
ganzzahlig, reell |
- |
Subtraktion |
ganzzahlig, reell |
ganzzahlig, reell |
* |
Multiplikation |
ganzzahlig, reell |
ganzzahlig, reell |
/ |
Division |
ganzzahlig, reell |
reell |
div |
ganzzahlige Division |
ganzzahlig |
ganzzahlig |
mod |
Rest einer ganzzahligen Division |
ganzzahlig |
ganzzahlig |
Hinweis: |
Der Plus-Operator (+) hat für Strings noch eine eigene Bedeutung: sind beide Variablen Zeichenketten, so hängt der +Operator diese zu einem String zusammen. |
Logische Operatoren
Logische Operatoren verknüpfen eine oder zwei Eingangsvariablen nach den jeweiligen logischen Verknüpfungsregeln. Sowohl die Eingänge als auch die Ausgänge sind Boole'sche Werte (true oder false).
Operator |
Operation |
not |
Negation |
and |
logisches Und |
or |
logisches Oder |
xor |
exklusives Oder |
Hinweis: |
Logische Operatoren lassen sich auch auf ganze Zahlen anwenden. In diesem Fall werden sämtliche Bits jeweils einzeln der logischen Verknüpfung unterworfen. |
Vergleichsoperatoren
Mit Vergleichsoperatoren können jeweils typ-gleiche Operanden verglichen werden. Als Ergebnis wird ein logischer Wert zurückgeliefert (true oder false). Vergleichsoperatoren können nicht nur auf numerische Werte angewendet werden, sondern auch auf logische Werte und auf Zeichen und Strings. Beim Vergleich von Zeichen wird die zugrundeliegende Codierung als Basis des Vergleichs herangezogen.
Operator |
Operation |
= |
gleich |
<> |
ungleich |
< |
kleiner |
<= |
kleiner gleich |
> |
größer |
>= |
größer gleich |
Hinweis: |
Die Anwendung von '=' und '<>' auf reelle Zahlen ist zwar prinzipiell erlaubt, allerdings kaum sinnvoll, da reelle Zahlen meist Rundungsfehler in der letzten signifikanten Stelle aufweisen. Dies führt dazu, dass ein Vergleich die falschen Ergebnisse liefert. So setzt das Statement test := (0.001*100000 = 100); die boole'sche Variable test nicht auf TRUE, obwohl die beiden Werte mathematisch gesehen gleich sind (der linke Ausdruck 0.001*100000 ergibt bei doppelter Genauigkeit 100.0000000000000021). |
Präzedenz (Rangfolge) von Operatoren
Wenn man einen komplizierten arithmetischen oder logischen Ausdruck auswertet, hängt das Ergebnis von der Reihenfolge der Anwendung der einzelnen Operatoren ab. Die Reihenfolge kann man gezielt durch Einsatz von Klammern kontrollieren. Setzt man keine Klammern, so ergibt sich eine Default-Einstellung, die als Operator-Präzedenz bezeichnet wird. Grundsätzlich gilt hier, dass Vorzeichen und Negation vor Multiplikation und Division berechnet werden; diese kommen wiederum vor Addition und Subtraktion, und zum Schluss werden erst die Vergleichsoperatoren ausgewertet.
Persönl. Anmerkung: |
Es ist keine Schande und kostet auch keine Rechenzeit, wenn man mehr Klammern als nötig setzt. Ich tendiere dazu, eher mehr Klammern als notwendig zu setzen; dies gilt vor allem für komplizierte logische Ausdrücke, für die ein paar Klammern mehr eventuell Stunden an Fehlersuche ersparen können. |
Eine detailierte Aufstellung der Operatoren und ihre Rangfolge gibt folgende Tabelle:
Stufe 1 (höchste Präzedenz): Unäre Operatoren
|
@ |
Adresse einer Variablen oder Funktion (liefert einen Pointer zurück) |
not |
logische oder bitweise Negation |
Stufe 2: Multiplikative und bitweise Operatoren
|
* |
Multiplikation; Schnittmenge |
/ |
Gleitkommadivision |
div |
Ganzzahlige Division |
mod |
Modulo (Rest einer Integer-Division) |
as |
Typumwandlung (typecast) |
and |
logisches oder bitweises UND |
shl |
bitweise Verschiebung nach links |
shr |
bitweise Verschiebung nach rechts |
Stufe 3: Additive Operatoren |
+ |
Addition, Vereinigungsmenge, String-Verkettung |
- |
Subtraktion, Differenzmenge |
or |
logisches oder bitweises ODER |
xor |
logisches oder bitweises Exklusiv-ODER |
Stufe 4 (niedrigste Präzedenz): Vergleichsoperatoren |
= |
Test auf Gleichheit |
<> |
Ungleichheit |
< |
kleiner als |
> |
größer als |
<= |
kleiner oder gleich, oder eine Teilmenge einer Menge |
>= |
größer oder gleich, oder eine Obermenge einer Menge |
in |
Test ob ein Wert Element einer Menge ist |
is |
Test ob ein Objekt typkompatibel ist |
|