Operatoren

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Als Operatoren werden in der Programmierung Befehle oder Zeichen genannt, die für Vergleiche, Prüfungen oder Verknüpfungen benötigt werden. Im BASIC 2.0 des C64 gibt es folgende Operatoren:

  • Arithmetische (mathematische) Operatoren wie Negation (Vorzeichenwechsel), Addition (+), Subtraktion (-), Multiplikation (*), Division (/), Potenzierung (↑).
  • Für die Verknüpfungen von Zeichenketten das Pluszeichen (+).
  • Die Vergleichsoperatoren Gleich (=), Ungleich (<>), Kleiner (<), Größer (>), Kleiner gleich (<=), Größer gleich (>=).
  • Die logische Operatoren für die Kombination von Vergleichen, Boole'sche Operationen (bit-weise Verknüpfungen): AND, NOT, OR.

Auswertungsergebnis[Bearbeiten | Quelltext bearbeiten]

Die Operatoren liefern je nach deren Klasse entsprechende Ergebnistypen in bestimmten, teils eingeschränkten Wertebereichen. Außer im Falle einer Zeichenketten-Verknüpfungsoperation, ist das Ergebnis stets numerisch und eine Fließkommazahl.

Operatorklasse Ergebnis
arithmetische Operatoren Fließkommazahlenbereich
Zeichenketten-Verknüpfungsoperator Zeichenkettenwertebereich
Vergleichsoperatoren -1 (wahr), 0 (falsch)
logische Operatoren bzw.
Bit-Operatoren
Ganzzahl -32768 bis 32767 (16-Bit Integer)

Auswertungsreihenfolge[Bearbeiten | Quelltext bearbeiten]

In arithmetischen Ausdrücken werden die folgenden Operatoren einer festgelegten Reihenfolge ausgewertet. Die in der Tabelle dargestellte Priorität zeigt mit aufsteigenden Werten die steigende Bevorzugung gegenüber den jeweils anderen Operatoren an. Möchte man entgegen der impliziten Auswertungsreihenfolge, eine bestimmte erzwingen, muss man die entsprechenden Teilausdrücke in runden Klammern setzen. Der geklammerte Ausdruck wird dann zuerst ausgewertet bevor mit dessen Ergebnis weiter gerechnet wird.
Generell ist es ratsam in komplexeren Ausdrücken, der Lesbarkeit und Wartbarkeit wegen, eine Klammerung immer entsprechend der gewollten Auswertung vorzugeben (es sei denn Optimierung hinsichtlich Platz und Laufzeit stehen dem dringend entgegen).

Es können bis zu 10 Klammern ineinander verschachtelt werden. Weitere Klammerebenen führen zur Fehlermeldung ?OUT OF MEMORY ERROR, z.B. bei 11 Klammerebenen:

PRINT  (1+(2+(3+(4+(5+(6+(7+(8+(9+(10+(10+1)))))))))))

Die Fehlermeldung bezieht sich dabei auf die Beschränkung des BASIC-Stapels.


Vergleichsoperatoren auf unterschiedliche Werttypen angewendet liefern den Fehler ?TYPE MISMATCH ERROR. Ein automatische Typkonvertierung existiert nicht und es ist unter Zuhilfenahme entsprechender Funktionen für gleichartige Werttypen zu sorgen.

Die Priorität 1 weist die höchste Bindung auf:

Priorität Operator Operatorbeschreibung
1 Potenzieren
2 - Vorzeichenwechsel bzw. Negation
3 *, / Multiplizieren, Dividieren
4 +, - Addieren, Subtrahieren
5 <>, =,
<, >,
<=, >=
ungleich, gleich,
kleiner, größer
kleinergleich, größergleich
6 NOT logische Negation
7 AND logisches UND
8 OR logisches ODER

Beispiele[Bearbeiten | Quelltext bearbeiten]

10 A=2 : B=0
20 IF ( A>0 OR B=1 ) AND A=1 THEN C=1
30 PRINT A, B, C

Ein RUN liefert

  2      0      0

C bleibt 0, obwohl A > 0, aber A nicht 1 ist.
Wenn die Klammer fehlt, ändert sich auch die Logik und damit das Endergebnis: C wird nämlich 1, weil A > 0, auch wenn nicht A=1 ist und egal welche Werte B auch immer annimmt.


10 A=1 : B=192
20 IF A AND B >0 THEN PRINT "A AND B IST WAHR!"
30 IF (A AND B)>0 THEN PRINT "(A AND B) IST WAHR!"

liefert die Ausgabe:

A AND B IST WAHR!

In Zeile 20 werden zwei Vergleiche auf deren Wahrheitsgehalt geprüft (A ist <>0, somit wahr und (AND) B ist >0 und somit ebenfalls wahr.

In Zeile 30 wird eine binäre AND-Verknüpfung durchgeführt, die zum Ergebnis '0' (unwahr) führt (da binär 00000001 AND 11000000 = 00000000) und somit der Vergleich ">0" nicht zutrifft.