BASIC-Compiler

Datentypen

Der JKCEMU-BASIC-Compiler kennt vier Datentypen:

Integer

Beim numerischen Datentyp Integer werden die Zahlen intern im 16-Bit-Zweierkomplement gespeichert. Damit umfasst der Wertebereich auch die Zahl -32768. Allerdings kann diese Zahl nicht immer errechnet werden, da deren absoluter Betrag (+32768), der bei manchen Berechnungen intern gebildet werden muss, nicht mehr im Wertebereich liegt. Aus diesem Grund sind bei Integer nur Zahlen von -32767 bis +32767 voll nutzbar.

Long

Long ist ein numerischer Datentyp, der ganze Zahlen im 32-Bit-Zweierkomplement speichert. Adäquat zu Integer gibt es auch bei Long eine Zahl, die zwar mit zum Wertebereich gehört, aber nicht voll nutzbar ist: -2147483648.

Decimal

Dieser Datentyp speichert die Zahlen als gepackte BCD-Zahlen in 6 Bytes (BCD: Binary Coded Decimal, gepackt: zwei Ziffern pro Byte). Das oberste Halbbyte enthält das Vorzeichen (1 Bit) und die Anzahl der Nachkommastellen (3 Bit). Damit ergeben sich 11 Dezimalstellen, davon 0 bis 7 Nachkommastellen. Es lassen sich somit folgende Zahlen speichern:

  -99999999999 bis 99999999999 bzw.
  -9999999999.9 bis 9999999999.9 bzw.
  ...
  -9999.9999999 bis 9999.9999999

Der kleinste darstellbare Betrag ist: 0.0000001

Während die meisten BASIC-Interpreter und -Compiler zur Speicherung von Fließkommazahlen auf einen Datentyp mit reinen Binärerzahlen sowie mit Mantisse und Exponent zurückgreifen (z.B. Single, Float, Double), verwendet der JKCEMU-BASIC-Compiler den Datentyp Decimal, der die Zahlen intern im Dezimalsystem speichert. Das hat den Vorteil, dass keine Rundungsfehler durch die Umrechnung zwischen Dezimal- und Binärsystem auftreten. Dadurch eignet sich der Datentyp auch für mathematisch exakte Berechnungen (z.B. für Geldbeträge, wo auch der letzte Cent stimmen muss). Wenn allerdings das Ergbenis einer Berechnung mehr Stellen hat, als der Datentyp fassen kann, kommt es entweder zu einem Überlauf (mehr als 11 Vorkommastellen) oder die zu vielen Nachkommastellen werden abgeschnitten. Im ersten Fall bricht das Programm mit einer Fehlermeldung ab, im zweiten Fall werden die Fehlervariablen ERR und ERR$ entsprechend gesetzt. Man kann somit im Programm mit

  IF ERR=E_DIGITS_TRUNCATED THEN ...

abfragen, ob bei den Decimal-Berechnungen in der letzten Anweisung Nachkommastellen abgeschnitten wurden oder ob das mathematisch exakte Ergebnis berechnet werden konnte.

An dieser Stelle sollen auch die Nachteile des Datentyps nicht verschwiegen werden:

String

Der Datentyp String dient zur Speicherung von Zeichenkettem und wird immer mit einem nachgestellten $-Zeichen markiert, d.h., alle Variablen und Funktionen, deren Namen auf ein Dollarzeichen enden, sind String-Variablen bzw. String-Funktionen, die eine Zeichenkette speichern bzw. liefern. Weitergehende Informationen finden Sie auf der Seite: Zeichenkettenverarbeitung

Typumwandlungen

Es gibt implizite und explizite Typumwandlungen. Implizit bedeutet, dass der Compiler automatisch die notwendige Typumwandlung vornimmt. Das geschieht an den Stellen, wo ein numerischer Datentyp mit einem kleineren Wertebereich an einer Stelle angegeben wurde, wo ein numerischer Datentyp mit einem größeren Wertebereich erwartet wird. Konkret betrifft das Operatoren mit zwei Operanden und bestimmte Funktionsargumente. Die implizite Typumwandlung geht immer vom kleineren zum größeren Wertebereich, d.h. in diese Richtung:

Integer → Long → Decimal

Bei der expliziten Typumwandlung wird eine BASIC-Funktion verwendet, die im Quelltext des BASIC-Programms steht, die also vom Programmierer ausgewählt wurde. Folgende Funktionen stehen zur Typumwandlung zur Verfügung:

Im weiteren Sinn dienen auch diese Funktionen der Typumwandlung: