Posted: Fri Feb 24, 2006 7:49 pm
Operatoren
Im allgemeinen werden Berechnungen in der normalen Schreibweise eingegeben, das heißt zwischen den Parametern steht der Operator: also 5 + 7 oder 3 * 4 oder auch 2 + 3 * 4 > 5 * i.
Diese Operatoren sind:
x + y die Addition. Wenn x und y Integer sind (d. h. nicht Double, Single oder Currency, sondern Integer, Word, Byte, Large oder Boolean) wird eine Integeraddition (ohne Überlaufprüfung) durchgeführt, sonst eine Fließkomma- oder Currencyaddition. Eine Fließkommaoperation läßt sich erzwingen durch cDbl oder Kennzeichnung einer Konstanten (durch nnn.0 oder nnn#) als Fließkommakonstante (bzw. cCur oder @).
x - y die Subtraktion. Wenn x und y Integer sind (d. h. nicht Double, Single oder Currency, sondern Integer, Word, Byte, Large oder Boolean) wird eine Integersubtraktion (ohne Überlaufprüfung) durchgeführt, sonst eine Fließkomma- oder Currencysubtraktion.
x * y die Multiplikation. Wenn x und y Integer sind (d. h. nicht Double, Single oder Currency, sondern Integer, Word, Byte, Large oder Boolean) wird eine Integermultiplikation (ohne Überlaufprüfung) durchgeführt, sonst eine Fließkomma- oder Currencymultiplikation.
x / y die Division (immer eine Fließkommadivision)
x ^ y die Potenzierung
-x das negative Vorzeichen, die Negation
+x das positive Vorzeichen
x Mod y der Divisionsrest (als Integeroperation)
x % y der Divisionsrest (als Integeroperation)
x Fmod y der Divisionsrest einer Fließkommadivision
x Div y die IntegerDivision
x \ y die IntegerDivision
x And y die bitweise Und-Verknüpfung (Integer)
x Or y die bitweise Oder-Verknüpfung (Integer)
x Xor y die bitweise Exklusiv-Oder-Verknüpfung (Integer)
x Imp y die bitweise Implikation (Integer)
x Eqv y die bitweise Äquivalenz (Integer)
x And8 y 8-Byte Large Integer bitweise Und
x Or8 y 8-Byte Large Integer bitweise Oder
x Xor8 y 8-Byte Large Integer bitweise Exklusiv-Oder
x Imp8 y 8-Byte Large Integer bitweise Implikation
x Eqv8 y 8-Byte Large Integer bitweise Äquivalenz
x Add8 y 8-Byte Large Integer Addition
x Sub8 y 8-Byte Large Integer Subtraktion
x Mul8 y 8-Byte Large Integer Multiplikation
x Div8 y 8-Byte Large Integer Division
x Mod8 y 8-Byte Large Integer Modulo (Divisionsrest)
x << y Integer x wird um y Bits nach links geschoben (Integer)
x Shl y Integer x wird um y Bits nach links geschoben (Integer)
x Shl% y Integer x wird um y Bits nach links geschoben (32 Bit-Integer)
x Shl& y Wort (2-Byte) Integer x wird um y Bits nach links geschoben (16 Bit-Integer)
x Shlw y Wort (2-Byte) Integer x wird um y Bits nach links geschoben (16 Bit-Integer)
x Shl| y |-Byte Integer x wird um y Bits nach links geschoben (8 Bit-Integer)
x Shl8 y 8-Byte Integer x wird um y Bits nach links geschoben (64 Bit-Large)
x >> y Integer x wird um y Bits nach rechts geschoben (Integer)
x Shr y Integer x wird um y Bits nach rechts geschoben (Integer)
x Shr_ y wie Shr, statt _ %, &, | oder 8, siehe oben: Shl_
x Sar y Integer x wird um y Bits nach rechts geschoben, das oberste Bit wird kopiert, also nicht wie bei Shr mit Null besetzt. Arithmetik Shift nach rechts. (Integer)
x Sar_ y wie Sar, statt _ %, &, | oder 8, siehe oben: Shl_
x Rol y Integer x wird um y Bits links herum rotiert; Bits, die links herausfallen würden, werden von rechts wieder nachgeschoben, also nicht mit Nullen aufgefüllt (Integer)
x Rol_ y wie Rol, statt _ %, &, | oder 8, siehe oben: Shl_
x Ror y Integer x wird um y Bits rechts herum rotiert; Bits, die rechts herausfallen würden, werden von links wieder nachgeschoben, also nicht mit Nullen aufgefüllt (Integer)
x Ror_ y wie Ror, statt _ %, &, | oder 8, siehe oben: Shl_
x = y der Vergleich "gleich"
x != y der Vergleich "ungleich"
x >< y der Vergleich "ungleich"
x <> y der Vergleich "ungleich"
x > y der Vergleich "größer"
x >= y der Vergleich "größer oder gleich"
x => y der Vergleich "gleich oder größer"
x < y der Vergleich "kleiner"
x <= y der Vergleich "kleiner oder gleich"
x =< y der Vergleich "gleich oder kleiner"
x == y der Vergleich "gleich", genau wie = ((altes == ersetzen durch NEAR, oder Vergleich mit Single!))
x NEAR y der Vergleich "fast gleich"
x && y logisches Und, -1 wenn x und y von Null verschieden sind, sonst 0. Wenn x gleich 0 ist, wird y nicht berechnet, da das Ergebnis ohnehin feststeht, logischer Kurzschluß. siehe unten: ?:
x || y logisches Oder, -1 wenn x oder y oder beide von Null verschieden sind, sonst 0. Wenn x ungleich Null ist, so wird y erst gar nicht berechnet, da das Ergebnis ohnehin feststeht, logischer Kurzschluß, siehe unten: ?:
x ^^ y logisches Exklusiv Oder, -1 wenn entweder x und y, aber nicht beide, von Null verschieden sind, sonst 0
x %& y die Bitweise Und-Verknüpfung, höhere Priorität als And
x $ y die Stringaddition, x und y werden, ggf. nach Konvertierung (Str$) als Strings verkettet
x & y die Stringaddition, x und y werden, ggf. nach Konvertierung (Str$) als Strings verkettet
x + y wenn bei der Addition beide Parameter Strings sind, wird eine Stringaddition durchgeführt
x | y die Bitweise Und-Verknüpfung, höhere Priorität als Or
x %| y die Bitweise Und-Verknüpfung, höhere Priorität als Or
Not x das Komplement, mit niedriger Operatorpriorität
~x das Komplement, wie (NOT x), aber mit höherer Priorität
!x die logische Negation, -1 wenn x gleich Null ist, sonst 0
cond ? x : y der bedingte Ausdruck (der einzige dreistellige Operator). wenn cond von 0 verschieden ist, wird der Ausdruck x berechnet, sonst der Ausdruck y. Genau wie bei &&, ||, Iif und Choose wird nur berechnet, was für die Auswertung nötig ist, das heißt, bei ?: oder Iif wird nur der erste oder nur der zweite Ausdurck berechnet - und nicht beide, und dann eines der Rechenergebnisse verworfen. Dadurch ist es z.B. möglich, mit fx = x != 0 ? sin(x) / x : 1 eine Berechnung abzusichern, gegen Division durch Null oder Feldgrenzenüberlauf oder... . Bei komplizierteren Berechnungen gibt es auch einen Geschwindigkeitsgewinn. Gleichbedeutent zu x ? a : b kann auch Iif(x, a, b) verwendet werden.
Variants: Nur die Grundrechenarten + - * / und die Vergleiche ( =, > >=, =>, <, <=, =<, <>, >< und !=) existieren auch in einer Variant Version. Bei Variants mit VT_NULL gibt es sonst (z.B. bei And) eine Fehlermeldung.