Der Wert x1 mit dem Datentyp typ1 soll in einen Wert x2 eines Datentyps typ2 überführt werden.Situation 1
Die Datentypen typ1 und typ2 gehören zu einer Typfamilie.
Als zu einer Typfamilie gehörig angesehen werden sollen die Datentypen, die zum Beispiel zur Darstellung von
Beispiel (Turbo Pascal):
VAR s1, s2, s3 : SHORTINT; { 8 Bit }
i1, i2, i3 : INTEGER; { 16 Bit }
BEGIN
i1 := 7; i2 := 128; s1 := 8;
s2 := i1; { zulaessig : s2 = 7 }
s3 := i2; { zulaessig : s3 = -128 !!!!! }
i3 := s1; { zulaessig : i3 = 8 }
END;
Es gilt folgendes:
zieldatentyp(wert)Dies trifft zum Beispiel auf Turbo Pascal, Delphi und Gnu Pascal zu.
Beispiel:
s3 := ShortInt(i2);Der einzige Unterschied zur impliziten Typkonvertierung besteht darin, daß im Quelltext explizit darauf hingewiesen wird, daß eine Konvertierung stattfindet.
Situation 2
Der Wert x1 wird, ohne Veränderung seiner rechnerinternen Darstellung, als Wert eines anderen Datentyps interpretiert.
Beispiel (Turbo Pascal):
TYPE farbe = (rot, gruen, blau);
VAR w1, w2 : WORD; { 16 Bit }
i1, i2 : INTEGER; { 16 Bit }
f : farbe;
BEGIN
i1 := 1; i2 := -1;
w1 := i1; { zulaessig : w1 = 1 }
w2 := i2; { zulaessig : w2 = 65535 !!!!! }
f := i1; { nicht zulaessig !!!!! }
i2 := f; { nicht zulaessig !!!!! }
END;
Es gilt folgendes:
zieldatentyp(wert)Beispiel:
TYPE farbe = (rot, gruen, blau);
VAR i1, i2 : INTEGER;
f1, f2 : farbe;
BEGIN
i1 := 1; f1 := blau;
f2 := farbe(i1); { zulaessig : f2 = gruen }
i2 := Integer(f2); { zulaessig : i2 = 2 }
{ oder }
i2 := Ord(f2); { auch in Standard Pascal }
END;
Situation 3
Die Überführung des Wertes x1 mit dem Datentyp typ1
in einen Wert x2 des Datentyps typ2 erfordert eine
Veränderung der rechnerinternen Darstellung.
Die Datentypen typ1 und typ2 sind jedoch in ihrer Bedeutung
"verwandt" (z.B. verschiedene numerische Datentypen).
Beispiel:
VAR r1, r2 : REAL;
i1, i2 : INTEGER;
BEGIN
r1 := 1.0; i1 := 2;
r2 := i1; { zulaessig : r2 = 2.0 }
i2 := r1; { nicht zulaessig !!!!! }
END;
Es gilt
x reellwertig
Trunc(x) ganzer Anteil von x
Round(x) nächste ganze Zahl zu x
Situation 4
Die Überführung des Wertes x1 mit dem Datentyp typ1
in einen Wert x2 des Datentyps typ2 erfordert eine
Veränderung der rechnerinternen Darstellung.
Der Datentyp typ1 dient primär der rechnerinternen Verabeitung,
der Datentyp typ2 wird zur rechnerexternen Repräsentation der
Werte von typ1 verwendet (z.B. numerische Datentypen -
Zeichenketten-Datentypen).
Beispiel:
VAR s : PACKED ARRAY[1..20] OF CHAR;
r : REAL;
BEGIN
s := r; { nicht zulaessig !!!!! }
r := s; { nicht zulaessig !!!!! }
END;
In diesem Zusammenhang ist zu bemerken:
VAR s : PACKED ARRAY[1..20] OF CHAR;
r : REAL;
BEGIN
r := 3.14;
Writeln(r); { Wert von r wird auf Standardausgabe geschrieben }
WriteStr(s, r); { Wert von r wird auf Zeichenkette s geschrieben }
s := '3.14';
ReadStr(s, r); { Wert von r wird von der Zeichenkette s gelesen }
Readln(r); { Wert von r wird von der Standardeingabe gelesen }
END;
Situation 5Die Datentypen typ1 und typ2 sind nicht verwandt.
Die Werte beider Datentypen können nicht ineinander
überführt werden.
Bemerkung:
Es existieren keine unmittelbaren Sprachmittel, die dies leisten.
Es ist aber natürlich möglich, spezielle Routinen zu schreiben,
die für jeweils zwei Datentypen die Konvertierung der Werte
vornehmen.