Variablen, Typen und Operatoren
Variablen Definition
Um eine Variable in PureBasic zu definieren, geben Sie ihren Namen ein oder den Typ den die Variable annehmen soll. Variablen müssen nicht ausdrücklich deklariert werden, sie können auch als Variablen "on-the-fly" benutzt werden. Das DefType Schlüsselwort kann benutzt werden, um eine ganze Reihe von Variablen zu definieren.Beispiel:
a.b ; Deklariert eine Variable genannt 'a' vom Typ Byte (.b). c.l = a*d.w ; 'd' wird hier mitten im Ausdruck deklariert !Hinweis: Variablen-Namen dürfen nicht mit einer Zahl (0,1,...) beginnen und keine Operatoren (+,-,...) sowie Sonderzeichen (ß,ä,ö,ü,...) enthalten. Wenn Sie während des Programmablaufs den Inhalt einer Variable nicht ändern müssen (z.B. Sie nutzen feste Werte für ID's etc.), können Sie auch einen Blick auf Konstanten als Alternative werfen.
Basic Typen
PureBasic erlaubt Variablen-Typen. Diese Typen sind vorzeichenbehaftet und können standardmäßig Ganzzahlen (integers), Fließkommazahlen (float numbers) oder einfach String-Zeichen sein. Hier folgt eine Liste der unterstützten Typen und eine Kurzbeschreibung :
Name Erweiterung Speicherverbrauch BereichByte .b 1 Byte im Speicher -128 bis +127 Word .w 2 Byte im Speicher -32768 bis +32767 Long .l 4 Byte im Speicher -2147483648 bis +2147483647 Float .f 4 Byte im Speicher unlimitiert (siehe unten) String .s Länge des Strings + 1 bis zu 64000 Zeichen
Operatoren
Operatoren sind die Funktionen, die Sie in Ausdrücken zum Kombinieren von Variablen, Konstanten oder was auch immer verwenden können. Die nachfolgende Tabelle zeigt die Operatoren, die Sie in PureBasic verwenden können (ohne bestimmte Reihenfolge). Als Abkürzungen werden LS = "Linke Seite" (links vom Operator) bzw. RS = "Rechte Seite" (rechts vom Operator) verwendet.
Operator Beschreibung / Beispiel =Gleich. Dies kann auf zwei Arten benutzt werden. Die erste Möglichkeit ist, den Wert des Ausdrucks von RS der Variablen von LS zuzuweisen. Die zweite Möglichkeit ist, wenn das Ergebnis des Operators in einem Ausdruck benutzt wird, um zu testen, ob die Werte der Ausdrücke von LS und RS dieselben sind (sind sie gleich, wird der Operator als Ergebnis wahr / 'true' zurückliefern, andernfalls falsch / 'false').
Beispiel:
a=b+c ; Weist den Wert des Ausdrucks "b+c" der Variablen "a" zu
If abc=def ; Testet, ob die Werte von abc und def gleich sind, und benutzt dieses Ergebnis für den If Befehl +Plus. Addiert den Wert des Ergebnisses vom Ausdruck auf RS zum Wert des Ausdrucks auf LS. Wird das Ergebnis dieses Operators nicht benutzt und es befindet sich eine Variable auf LS, dann wird der Wert des Ausdrucks von RS direkt zur Variablen auf LS addiert.
Beispiel:
number=something+2 ; Addiert den Wert 2 zu "something" und benutzt das Ergebnis mit dem 'Gleich' Operator.
variable+expression ; Der Wert des Ausdrucks "expression" wird direkt zur Variablen "variable" addiert. -Minus. Subtrahiert den Wert des Ausdrucks auf RS vom Wert des Ausdrucks auf LS. Wenn sich auf LS kein Ausdruck befindet, dann liefert dieser Operator den negativen Wert des Ausdrucks auf RS. Wird das Ergebnis dieses Ausdrucks nicht benutzt und es befindet sich eine Variable auf LS, dann wird der Wert des Ausdrucks von RS direkt von der Variablen auf LS subtrahiert. Dieser Operator kann nicht mit Variablen vom Typ 'String' benutzt werden.
Beispiel:
var=#MyConstant-foo ; Subtrahiert den Wert von "foo" von "#MyConstant" und benutzt das Ergebnis miz dem 'Gleich' Operator.
another=another+ -var ; Rechnet mit dem negativen Wert von "var" und benutzt das Ergebnis mit dem 'Plus' Operator.
variable-expression ; Der Wert des Ausdrucks "expression" wird direkt von der Variablen "variable" subtrahiert. *Multiplikation. Multipliziert den Wert des Ausdrucks auf LS mit dem Wert des Ausdrucks auf RS. Wird das Ergebnis dieses Operators nicht benutzt und es befindet sich eine Variable auf LS, dann wird der Wert der Variablen direkt mit dem Wert des Ausdrucks auf RS multipliziert. Dieser Operator kann nicht mit Variablen vom Typ 'String' benutzt werden.
Beispiel:
total=price*count ; Multipliziert den Wert von "price" mit dem Wert von "count" und benutzt das Ergebnis mit dem 'Gleich' Operator.
variable*expression ; "variable" wird direkt mit dem Wert von "expression" multipliziert. /Division. Dividiert den Wert des Ausdrucks auf LS durch den Wert des Ausdrucks auf RS. Wird das Ergebnis dieses Operators nicht benutzt und es befindet sich eine Variable auf LS, dann wird der Wert der Variablen direkt durch den Wert des Ausdrucks auf RS dividiert. Dieser Operator kann nicht mit Variablen vom Typ 'String' benutzt werden.
Beispiel:
count=total/price ; Dividiert den Wert von "total" durch den Wert von "price" und benutzt das Ergebnis mit dem 'Gleich' Operator.
variable/expression ; "variable" wird direkt durch den Wert von "expression" dividiert. &Bitweises AND. Sie sollten sich mit Binär-Zahlen auskennen, wenn Sie diesen Operator benutzen. Das Ergebnis dieses Operators ist der Wert des Ausdrucks auf LS, durch 'AND' (Und) verknüpft mit dem Wert des Ausdrucks auf RS, und dies Bit für Bit. Der Wert jedes Bits wird entsprechend der nachfolgenden Tabelle gesetzt. Wird das Ergebnis des Operators nicht benutzt und es befindet sich eine Variable auf LS, dann wird das Ergebnis des Ausdrucks direkt in dieser Variable gespeichert. Dieser Operator kann nicht mit Variablen vom Typ 'String' benutzt werden.
LS | RS | Ergebnis --------------------- 0 | 0 | 0 0 | 1 | 0 1 | 0 | 0 1 | 1 | 1Beispiel:
; Zeigt die Benutzung mit Binär-Zahlen, da es so leichter ist, das Ergebnis zu sehen
a.w = %1000 & %0101 ; Ergebnis wird 0 sein
b.w = %1100 & %1010 ; Ergebnis wird %1000 sein
bits = a & b ; verknüpft jedes Bit von a und b durch AND und benutzt das Ergebnis mit dem 'Gleich' Operator
a & b ; verknüpft jedes Bit von a und b durch AND und speichert das Ergebnis direkt in der Variable "a" |Bitweises OR. Sie sollten sich mit Binär-Zahlen auskennen, wenn Sie diesen Operator benutzen. Das Ergebnis dieses Operators ist der Wert des Ausdrucks auf LS, durch 'OR' (Oder) verknüpft mit dem Wert des Ausdrucks auf RS, und dies Bit für Bit. Der Wert jedes Bits wird entsprechend der nachfolgenden Tabelle gesetzt. Wird das Ergebnis des Operators nicht benutzt und es befindet sich eine Variable auf LS, dann wird das Ergebnis des Ausdrucks direkt in dieser Variable gespeichert. Dieser Operator kann nicht mit Variablen vom Typ 'String' benutzt werden.
LS | RS | Ergebnis --------------------- 0 | 0 | 0 0 | 1 | 1 1 | 0 | 1 1 | 1 | 1Beispiel:
; Zeigt die Benutzung mit Binär-Zahlen, da es so leichter ist, das Ergebnis zu sehen
a.w = %1000 | %0101 ; Ergebnis wird %1101 sein
b.w = %1100 | %1010 ; Ergebnis wird %1110 sein
bits = a | b ; verknüpft jedes Bit von a und b durch OR und benutzt das Ergebnis mit dem 'Gleich' Operator
a | b ; verknüpft jedes Bit von a und b durch OR und speichert das Ergebnis direkt in der Variable "a" !Bitweises XOR. Sie sollten sich mit Binär-Zahlen auskennen, wenn Sie diesen Operator benutzen. Das Ergebnis dieses Operators ist der Wert des Ausdrucks auf LS, durch 'XOR' (Exklusives Oder) verknüpft mit dem Wert des Ausdrucks auf RS, und dies Bit für Bit. Der Wert jedes Bits wird entsprechend der nachfolgenden Tabelle gesetzt. Wird das Ergebnis des Operators nicht benutzt und es befindet sich eine Variable auf LS, dann wird das Ergebnis des Ausdrucks direkt in dieser Variable gespeichert. Dieser Operator kann nicht mit Variablen vom Typ 'String' benutzt werden.
LS | RS | Ergebnis --------------------- 0 | 0 | 0 0 | 1 | 1 1 | 0 | 1 1 | 1 | 0Beispiel:
; Zeigt die Benutzung mit Binär-Zahlen, da es so leichter ist, das Ergebnis zu sehen
a.w = %1000 ! %0101 ; Ergebnis wird %1101 sein
b.w = %1100 ! %1010 ; Ergebnis wird %0110 sein
bits = a ! b ; verknüpft jedes Bit von a und b durch XOR und benutzt das Ergebnis mit dem 'Gleich' Operator
a ! b ; verknüpft jedes Bit von a und b durch XOR und speichert das Ergebnis direkt in der Variable "a" ~Bitweises NOT. Sie sollten sich mit Binär-Zahlen auskennen, wenn Sie diesen Operator benutzen. Das Ergebnis dieses Operators ist der - durch 'NOT' (Nicht) verknüpfte - Wert des Ausdrucks auf RS, und dies Bit für Bit. Der Wert jedes Bits wird entsprechend der nachfolgenden Tabelle gesetzt. Dieser Operator kann nicht mit Variablen vom Typ 'String' benutzt werden.
RS | Ergebnis -------------- 0 | 1 1 | 0Beispiel:
; Zeigt die Benutzung mit Binär-Zahlen, da es so leichter ist, das Ergebnis zu sehen
a.w = ~%1000 ; Ergebnis wird %0111 sein
b.w = ~%1010 ; Ergebnis wird %0101 sein
()Klammern. Sie können Klammern paarweise setzen, um einen Teil eines Ausdrucks zuerst zu berechnen, oder in einer bestimmten Reihenfolge.
Beispiel:
a = (5 + 6) * 3 ; Ergebnis wird 33 sein, da 5+6 zuerst berechnet wird
b = 4 * (2 - (3 - 4)) ; Ergebnis wird 12 sein, da zuerst 3-4 berechnet wird, dann 2-Zwischenergebnis, danach die Multiplikation
<Kleiner als. Dies wird benutzt, um die Werte der Ausdrücke auf LS und RS zu vergleichen. Ist der Wert des Ausdrucks auf LS kleiner als der Wert des Ausdrucks auf RS, dann ergibt dieser Operator als Ergebnis 'true' (wahr), andernfalls das Ergebnis 'false' (falsch).
>Größer als. Dies wird benutzt, um die Werte der Ausdrücke auf LS und RS zu vergleichen. Ist der Wert des Ausdrucks auf LS größer als der Wert des Ausdrucks auf RS, dann ergibt dieser Operator als Ergebnis 'true' (wahr), andernfalls das Ergebnis 'false' (falsch).
<=Kleiner als oder gleich. Dies wird benutzt, um die Werte der Ausdrücke auf LS und RS zu vergleichen. Ist der Wert des Ausdrucks auf LS kleiner als oder gleich dem Wert des Ausdrucks auf RS, dann ergibt dieser Operator als Ergebnis 'true' (wahr), andernfalls das Ergebnis 'false' (falsch).
>=Größer als oder gleich. Dies wird benutzt, um die Werte der Ausdrücke auf LS und RS zu vergleichen. Ist der Wert des Ausdrucks auf LS größer als oder gleich dem Wert des Ausdrucks auf RS, dann ergibt dieser Operator als Ergebnis 'true' (wahr), andernfalls das Ergebnis 'false' (falsch).
<>Ungleich (nicht gleich zu). Dies wird benutzt, um die Werte der Ausdrücke auf LS und RS zu vergleichen. Ist der Wert des Ausdrucks auf LS gleich dem Wert des Ausdrucks auf RS, dann ergibt dieser Operator als Ergebnis 'false' (falsch), andernfalls das Ergebnis 'true' (wahr).
AndLogisches AND (Und). Kann zum Kombinieren der logisch wahren ('true') oder falschen ('false') Ergebnisse der Vergleichsoperatoren benutzt werden und ergibt die in der folgenden Tabelle enthaltenen Resultate.
LS | RS | Ergebnis ------------------------- false | false | false false | true | false true | false | false true | true | true OrLogisches OR (Oder). Kann zum Kombinieren der logisch wahren ('true') oder falschen ('false') Ergebnisse der Vergleichsoperatoren benutzt werden und ergibt die in der folgenden Tabelle enthaltenen Resultate.
LHS | RHS | Ergebnis ------------------------- false | false | false false | true | true true | false | true true | true | true <<Bitweises Shift (Verschieben) nach Links. Durch die Verwendung dieses Operators verschieben Sie die einzelnen Bits der Variablen auf der linken Seite des Operators um die auf der rechten Seite des Operators angegebene Anzahl an Bits nach links. Weggefallene Bits auf der rechten Seite der Variablen werden mit 0 aufgefüllt. Sofern das Ergebnis dieses Ausdrucks nicht benutzt wird und auf der linken Seite des Operators eine Variable steht, dann wird der Wert dieser Variable verschoben. Es ist auf jeden Fall hilfreich, wenn Sie vor dem Verwenden dieses Operators die Binärzahlen verstanden haben. Obwohl Sie ihn auch anwenden können, als ob Sie jede Position die Sie verschieben mit dem Faktor 2 multiplizieren.
Anmerkung: Die Ausführung dieser Verschiebeoperation ist in der Regel weniger aufwendig als die vergleichbare Multiplikation.Beispiel:
a=%1011 << 1 ; Der Wert von a ergibt %10110. %1011=11, %10110=22
b=%111 << 4 ; Der Wert von b ergibt %1110000. %111=7, %1110000=208
c.l=$8000000 << 1 ; Der Wert von c ergibt 0. Bits, die über den linken Rand des Ergebnisses hinaus verschoben werden, gehen verloren.
>>Bitweises Shift (Verschieben) nach Rechts. Durch die Verwendung dieses Operators verschieben Sie die einzelnen Bits der Variablen auf der linken Seite des Operators um die auf der rechten Seite des Operators angegebene Anzahl an Bits nach rechts. Weggefallene Bits auf der linken Seite der Variablen werden mit 0 aufgefüllt. Sofern das Ergebnis dieses Ausdrucks nicht benutzt wird und auf der linken Seite des Operators eine Variable steht, dann wird der Wert dieser Variable verschoben. Es ist auf jeden Fall hilfreich, wenn Sie vor dem Verwenden dieses Operators die Binärzahlen verstanden haben. Obwohl Sie ihn auch anwenden können, als ob Sie jede Position die Sie verschieben durch den Faktor 2 dividieren.
Anmerkung: Die Ausführung dieser Verschiebeoperation ist in der Regel weniger aufwendig als die vergleichbare Division.Beispiel:
d=16 >> 1 ; Der Wert von d ergibt 8. 16=%10000, 8=%1000
e.w=%10101010 >> 4 ; Der Wert von e ergibt %1010. %10101010=170, %1010=10. Bits, die über den rechten Rand des Ergebnisses hinaus verschoben werden, gehen verloren. (Deshalb sehen Sie keine gerade Division durch 16.)
f.b=-128 >> 1 ; Der Wert von f ergibt -64. -128=%10000000, -64=%11000000. Beim Verschieben nach Rechts bleibt das Vorzeichen ("most significant bit") gleich.
%Modulo. Gibt den Rest der Integer-Division der Variable auf der linken Seite des Operators durch die Variable auf der rechten Seite zurück.
Beispiel:
a=16 % 2 ; Der Wert von a wird 0 sein, da 16/2 = 8 (kein Rest)
b=17 % 2 ; Der Wert von a wird 1 sein, da 17/2 = 8*2+1 (1 bleibt als Rest)
Priorität von Operatoren
Prioritäts-Level | Operatoren -----------------+--------------------- 7 | ~ 6 | <<, >>, %, ! 5 | |, & 4 | *, / 3 | +, - 2 | >, >=, <, <=, =, <> 1 | And, Or
Strukturierte Typen
Erstellt strukturierte Typen mit Hilfe der Structures Option. Weitere Informationen finden Sie im Strukturen Kapitel.
Spezielle Informationen über Fließkommazahlen (Floats)
Eine Fließkomma-Zahl (auch Gleitkomma-Zahl, englisch: Floating Point Number) wird in einer Art und Weise gespeichert, die den Binär-Punkt (trennt "Ganzzahlteil" vom "Kommateil") innerhalb der Zahl "gleiten" lässt, wodurch das Speichern sehr großer aber auch sehr kleiner Zahlen (mit vielen Nachkommastellen) möglich wird. Wie auch immer, Sie können nicht sehr große Zahlen mit gleichzeitig sehr hoher Genauigkeit (sozusagen große und kleine Zahlen zur selben Zeit) speichern. Eine weitere Einschränkung von Fließkomma-Zahlen ist, dass sie stets im Binärmodus arbeiten, weshalb sie nur die Zahlen exakt speichern können, welche mittels Multiplikation oder Division mit 2 ermittelt werden können. Dies ist insbesondere wichtig zu wissen, wenn Sie versuchen, eine Fließkommazahl in einer visuell lesbaren Form darzustellen (oder mit ihr Rechenoperationen auszuführen) - das Speichern von Zahlen wie 0.5 oder 0.125 ist einfach, da sie Divisionen von 2 sind. Das Speichern von Zahlen wie 0.1 ist schwieriger, diese wird möglicherweise als Zahl 0.9996125 gespeichert. Sie können versuchen, nur eine begrenzte Anzahl an (Nachkomma-) Stellen darzustellen, seien Sie aber nicht überrascht, wenn die Darstellung der Zahl anders aussieht, als Sie dies erwarten!
Dies gilt für alle Fließkomma-Zahlen, nicht nur die in PureBasic.