Blitz2D: RechnenUndVergleichen

Aus Wikibooks

Navigation: BlitzBasic >>> Blitz2D >>> Funktionen >>> Grundwissen

Für Berechnungen und Vergleiche gibt es diverse Operatoren. Im Gegensatz zu Funktionen, wo Parameter hinter dem Funktionsnamen in Klammern stehen, stehen Operatoren zwischen zwei Parametern, die sie miteinander verknüpfen und einen Rückgabewert liefern.

Berechnungen[Bearbeiten]

Ebenso wie man Zeichenketten zusammenfügen und in einer Stringvariablen speichern kann, kann man auch mit Integer- oder Floatwerte rechnen.

Opration Beispiel
Addieren Print 6 + 3
Subtrahieren Print 6 - 3
Multiplizieren Print 6 * 3
Dividieren Print 6 / 3
Potenzieren Print 6 ^ 3

Dazu kommen noch viele mathematische Funktionen, die jedoch erst später erklärt werden.

Vergleiche[Bearbeiten]

Eine Gleichung hat als Rückgabewert entweder True(Wahr) oder False(Falsch), je nachdem ob die Gleichung richtig oder Falsch ist.

Opration Beispiel
Gleich Print 6 = 3
Größer Print 6 > 3
Größer oder Gleich Print 6 >= 3
Kleiner Print 6 < 3
Kleiner oder Gleich Print 6 <= 3
Ungleich Print 6 <> 3

Mit dem Rückgabewert eines Vergleichs kann man auch rechnen, dabei wird für True der Wert 1 und für False der Wert 0 verwendet. Es kann aber auch jede Berechnung als Vergleich verwendet werden. Dabei wird nur ein Ergebnis von 0 als False und jedes andere Ergebnis als True bewertet.

weitere Operatoren[Bearbeiten]

Mod[Bearbeiten]

Mit Mod kann man den ganzzahligen Rest einer Division von zwei Integerzahlen ermitteln. So lässt sich auch überprüfen, ob eine Zahl durch eine andere teilbar ist. (wenn Zahl1 Mod Zahl2 als Ergebnis 0 hat)

Schiebeoperatoren Shl, Shr, Sar[Bearbeiten]

Zum Verständnis der Schiebeoperatoren ist es erforderlich, das Binärsystem zu verstehen, das jedoch erst später behandelt wird. Zunächst reicht es zu wissen, dass Schiebeoperatoren sehr schnell Zahlen mit 2 Multiplizieren oder dividieren können.

Shl multipliziert die linke Zahl so oft mit Zwei, wie die rechte Zahl angibt.

Tatsächlich werden dabei die Bits der Ausgangszahl so oft nach links verschoben, wie nach Shl angegeben wird. Das Bit an Position 31 dient zur kennzeichnung von negativen Zahlen, daher wird es von Shl nicht verändert. Es wird bei also jeweils rechts ein 0-Bit herein geschoben und das Bit an Position 30 geht verloren.
Beispiel:
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Ausgangszahl (27153) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 0 0 0 0 1 0 0 0 1
nach Shl 3 (217224) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 0 0 0 0 1 0 0 0 1 0 0 0
27153 Shl 3 = 27153 * 2³ = 27153 * 8 = 217224

Shr dividiert die linke Zahl so oft durch Zwei, wie die rechte Zahl angibt, jedoch funktioniert das nur korrekt, wenn die linke Zahl positiv ist. Dieser Fehler entsteht dadurch, dass Shr alle Bits, einschließlich des Negativ-Bit (Bit31) verschiebt. Darum sollte möglichst immer Sar anstelle von Shr verwendet werden, sonst führt das verschieben von Bits in Variablen zu unerwünschten Auswirkungen, dei aber keine Fehlermeldung Sar dividiert die linke Zahl so oft durch Zwei, wie die rechte Zahl angibt, mit Sar geht das jedoch auch mit negativen Zahlen.

Logische Operatoren And, Or, Xor[Bearbeiten]

Um mit logischen Operatoren zu rechnen, ist auch die Kenntnis des Binärsystems erforderlich. Aber man kann logische Operatoren auch zum Verknüpfen mehrerer Vergleiche verwenden.

Operator Beschreibung Beispiel
And ergibt Wahr(True), wenn beide Ausrücke wahr sind (A%<5) And (A%>3) ;ergibt nur True, wenn A%=4 ist
Or ergibt Wahr, wenn mindestens einer der Ausdrücke wahr ist (oder beide (A%<5) Or (A%>3) ;ergibt immer True
Xor ergibt nur wahr wenn einer, aber nicht beide Ausdrücke wahr sind (A%<5) Xor (A%>3) ;ergibt nur False, wenn A%=4 ist

Zusammenfassung[Bearbeiten]

Opration Beispiel
ganzahliger Divisionsrest Print 9 Mod 5 (ergibt 4)
Bitweise links verschieben Print 8 Shl 3 (ergibt 64)
Bitweise rechts verschieben Print 8 Shr 3 (ergibt 1)
Aritmetisches rechts verschieben Print 8 Sar 3 (ergibt 1)
Logisches und Print 8 And 3 (ergibt 0)
Logisches oder Print 8 Or 3 (ergibt 11)
Logisches exklusiv oder Print 8 Xor 3 (ergibt 11)

If-Then-Else[Bearbeiten]

If führt nachfolgende Anweisungen nur dann aus, der angegebene Vergleich True(ungleich 0) ergibt. Es können aber auch mit Else weitere Anweisungen angegeben werden, die nur ausgeführt werden, wenn der Vergleich hinter If False(gleich 0) ergibt. If ist eine Blockanweisung, das heißt, dass innerhalb eines If-Blocks beliebig viele andere Anweisungen und auch weitere If-Blöcke stehen können. Durch die Verschachtelung von If-Blöcken kann ein Programm schnell sehr unübersichtlich werden, darum ist es sinnvoll, die enthaltenen Anweisungen mit Tabs einzurücken und längere Anweisungsteile in Funktionen auszulagern.

Syntax(Einzeilig): If {Vergleich} [[Then][ {Anweisungen}][Else[If {Vergleich}] [{Anweisungen}]]|Endif | End If]

Syntax(mehrzeilig): 
If {Vergleich} [Then]
[{Anweisungen}]
[Else
[{Anweisungen}]]
Endif | End If

IF {Vergleich}[Bearbeiten]

Ein If-Block beginnt immer mit If und einem Vergleich. Der Vergleich wird berechnet und je nach Ergebnis werden nachfolgende Anweisungen ausgeführt.

Then {Anweisungen}[Bearbeiten]

Then nach dem Vergleich ist nicht erforderlich, sollte aber zur Verbesserung der Übersicht besonders bei verschachtelten If-Blöcken angegeben werden. Auch die Anweisungen hinter Then sind nicht erforderlich, dadurch ist beispielsweise auch folgender IF-Block gültig:

If {Vergleich} Else {Anweisungen} ;Die Anweisungen werden nur ausgeführt wenn der Vergleich False ergibt

Elseif | Else If {Vergleich} {Anweisungen}[Bearbeiten]

Mit Elseif (oder Else If) kann ein weiterer Vergleich angegeben werden, der nur geprüft wird, wenn der Vergleich hinter If False ergibt. Es ist sowohl die Schreibweise "Elseif" als auch "Else If" zulässig, jedoch sollte Elseif wegen der Verwechslungsgefahr bevorzugt verwendet werden.