Datentypen

 

Werte haben immer einen bestimmten Datentyp. Die Integerwerte (ganzzahlige Werte) haben in CompactC einen 8, 16 oder 32 Bit breiten Datentyp, floating point Zahlen sind immer 4 byte lang.

 

 

Datentyp

Vorzeichen

Wertebereich

Bit

 




char

Ja

-128 ... +127

8

unsigned char

Nein

0 ... 255

8

byte

Nein

0 ... 255

8

int

Ja

-32768 ... +32767

16

unsigned int

Nein

0 ... 65535

16

word

Nein

0 ... 65535

16

long (kein Mega32)

Ja

-2147483648 ... 2147483647

32

unsigned long (kein Mega32)

Nein

0 ... 4294967295

32

dword (kein Mega32)

Nein

0 ... 4294967295

32

float

Ja

±1.175e-38 to ±3.402e38

32

 

Wie man sieht, sind die Datentypen "unsigned char" und byte, "unsigned int" und word, sowie "unsigned long" und dword identisch.

 

 Da der Interpreter sonst zu groß werden würde, sind die 32-Bit Integer Datentypen nicht auf dem Mega32 verfügbar.

 

Strings

 

Es existiert kein expliziter "String" Datentyp. Ein String basiert auf einem character array. Man muss die Größe des arrays so wählen, daß alle Zeichen des Strings in das character array passen. Zusätzlich wird Platz für ein Terminierungszeichen (dezimal Null) benötigt, um das Ende der Zeichenkette anzuzeigen.

 

 

Typkonvertierung

 

Bei arithmetischen Ausdrücken passiert es sehr oft, daß einzelne Werte nicht vom gleichen Typ sind. So sind die Datentypen im folgenden Ausdruck gemischt (a ist integer variable).

 

a + 5.5

 

In diesem Fall wird a zuerst in den Datentyp float konvertiert und danach 5.5 addiert. Der Datentyp des Ergebnisses ist auch float. Es gelten bei der Typkonvertierung folgende Regeln:

 

Ist bei der Verknüpfung von zwei 8 Bit oder 16 Bit Integerwerten einer der beiden Datentypen vorzeichenbehaftet ("signed") so ist auch das Ergebnis des Ausdrucks vorzeichenbehaftet. D.h., die Operation wird "signed" ausgeführt.

 

Ist einer der beiden Operanden vom Typ float, so ist auch das Ergebnis vom Typ float. Sollte der andere der beiden Operanden einen 8 Bit oder 16 Bit Datentyp haben, so wird er vor der Operation in einen float Datentyp umgewandelt.