Operatoren
Höchste Rangfolge zuerst. Jeder binäre Operator ist linksassoziativ: a - b - c ist
(a - b) - c.
| Stufe | Operatoren | Bedeutung | Operandentypen |
|---|---|---|---|
| 1 | ( ) f(…) | Gruppierung, Aufruf einer integrierten Funktion | |
| 2 | ! - ~ (unär) | logisches Nicht, Negation, bitweises Nicht | !: beliebig · -: Integer/Real · ~: Integer |
| 3 | * / | Multiplikation, Division | Integer/Real |
| 4 | + - | Addition oder Verkettung, Subtraktion | Integer/Real oder Text + Text |
| 5 | << >> | Linksverschiebung, arithmetische Rechtsverschiebung | Integer |
| 6 | < <= > >= | Ordnung | zwei Zahlen oder zwei Texte |
| 7 | == != | Gleichheit | beliebig |
| 8 | & | bitweises UND | Integer |
| 9 | ^ | bitweises exklusives ODER | Integer |
| 10 | | | bitweises ODER | Integer |
| 11 | && | logisches UND (beide Seiten werden immer ausgewertet) | beliebig (Wahrheitswert) |
| 12 | || | logisches ODER (beide Seiten werden immer ausgewertet) | beliebig (Wahrheitswert) |
Es gibt keinen Modulo- (%), Potenz-, ternären (?:) oder Kommaoperator.
&& und || werten nicht verkürzt aus. Beide Operanden werden immer ausgewertet, erst links, dann
rechts. Ein Aufruf einer integrierten Funktion auf der rechten Seite wird auch dann ausgeführt, wenn
die linke Seite das Ergebnis bereits entschieden hat, und schlägt dieser Aufruf fehl, endet die
Aktion. Sichern Sie stattdessen mit einem verschachtelten if ab:
text = ClipboardGetText();
idx = StringGetIndexOf(text, ":");
// FALSCH: Wenn idx -1 ist, läuft StringGetSubstring(text, -1, 5) trotzdem und beendet die Aktion
// if (idx >= 0 && StringGetSubstring(text, idx, 5) == ":here") { ... }
// RICHTIG: Die zweite Prüfung läuft nur, wenn die erste zutrifft
if (idx >= 0) {
if (StringGetSubstring(text, idx, 5) == ":here") UtilityPrint("found");
}
Bitweise Operatoren binden schwächer als Vergleiche (wie in C). flags & 4 == 4 wird als
flags & (4 == 4) gelesen, also flags & true, also 0. Klammern Sie die Maske immer:
(flags & 4) == 4 oder (flags & 4) != 0.
Vergleiche lassen sich nicht verketten. 0 < x < 10 wird als (0 < x) < 10 gelesen, was einen
Bool mit einem Integer vergleicht und immer false ist. Schreiben Sie x > 0 && x < 10.