Typkonvertierung

Typkonvertierung

Typumwandlung (engl. type conversion oder cast) bezeichnet in der Informatik die Umwandlung des Wertes eines Datentyps in einen Wert eines anderen Datentyps.

Beispielsweise kann es sein, dass man eine Zahl als Zeichenkette darstellen möchte. Es muss dann eine Umwandlung der für die Darstellung der Zahl verwendeten Daten in die für die Darstellung einer Zeichenkette notwendigen Daten vorgenommen werden:

string s;    // Variable s kann Zeichenkette aufnehmen
int i = 42;  // Variable i nimmt ganze Zahl 42 auf (z. B. Daten "002A" (hex) auf 16-bit Rechner)
s = i;       // s soll Wert von i annehmen --Typkonflikt-- hier muss Konvertierung erfolgen!
             // z. B. in "343200" (ASCII Code für Zeichen 4 und 2, sowie C-String Terminator)

Oft kann der eine Datentyp den gesamten Wertebereich des anderen Datentyp aufnehmen, so dass man je nach Vergrößerung oder Verkleinerung der Wertemenge des Datentyps von Typerweiterung (engl. type promotion) oder Typeinschränkung (engl. type demotion) spricht.

Es gibt explizite und implizite Typumwandlungen.


Inhaltsverzeichnis

Explizite Typumwandlungen

Eine explizite Typumwandlung wird im Programmcode angegeben. Eine explizite Typumwandlung bezeichnet man auch als type cast (aus dem Englischen).

Der folgende Code-Schnipsel zeigt eine explizite Typumwandlung in Java:

int  i = 100;
byte b = (byte) i;

Dabei handelte es sich bei der Angabe (byte) um die explizite Typumwandlungsoperation.

Je nach Typisierung der verwendeten Programmiersprache kann das Fehlen der expliziten Angabe der Typumwandlung einen Fehler während der Kompilierung oder während der Laufzeit zur Folge haben.

Eine Variante expliziter Typumwandlung ist die Verwendung eigens dafür geschriebener Funktionen:

int  i = 100;
byte b = int2byte( i );

Funktionen analog zu int2byte() werden insbesondere in Programmiersprachen verwendet, die keine Operatoren dafür besitzen.

Implizite Typumwandlungen

Im Unterschied zu expliziten Typumwandlungen erscheinen implizite Typumwandlungen nicht im Quelltext. Sie werden entweder nach durch die jeweilige Programmiersprache vorgegebenen Vorschriften, oder gemäß einem vom Programmierer an einer anderen Stelle im Quelltext festgelegten Verfahren durchgeführt.

Beispiel:

byte b = 100;
int  i = b;

Dabei findet in der zweiten Zeile eine implizite Typumwandlung vom Typ byte in den Typ int statt. In diesem Fall ist die implizite Typumwandlung durch die Programmiersprache festgelegt.

Implizite Typumwandlung findet oftmals nur dann statt, wenn sie ohne Informationsverlust erfolgen kann, also wenn der Zieldatentyp einen gleichen oder größeren Wertebereich hat als der Ausgangsdatentyp. So erfolgt bei Bedarf zwar eine implizite Typumwandlung von byte (8 bit) nach int (16 bit), nicht aber umgekehrt.

Beispiel aus Java

Das folgende in der Programmiersprache Java geschriebene Beispiel verdeutlicht, wie implizite Typumwandlungen zu Fehlern in Programmen führen können, die schwer zu entdecken sind.

int z = 18;
float y = z / 4;                // explizit: float y = (float) ( z / 4 )
System.out.print(y);

Dieser Java-Code liefert, gegen die Intuition, nicht „4.5“ (4,5) als Ergebnis, sondern „4.0“ (4,0). Grund hierfür ist der Ausdruck z/4, der als ganzzahlige Division interpretiert wird, weil beide Argumente („z“ und „4“) vom Typ Integer sind. 18/4 = 4 Rest 2, der ganzzahlige Divisionsoperator „/“liefert somit 4. Die ganze Zahl 4 wird dann implizit in den Gleitkommawert („float“) „4.0“ umgewandelt, d. h. vor der Division findet keine Umwandlung statt. Als Kommentar ist die implizite Typumwandlung, die der Java-Compiler einfügt, explizit aufgeführt. Es gibt mehrere Möglichkeiten, den Code so zu ändern, dass er das gewünschte Ergebnis liefert. Falls einer der Parameter bei einer Division den Type „float“ hat, und der andere den Type „int“, so wird der ganzzahlige Wert implizit in eine Gleitkommazahl umgewandelt, und die Division als Gleitkommadivision durchgeführt.

int z = 18;
float y = z / 4.0f;
System.out.print(y);

Hier wird somit die Variable „z“ implizit in einen Float konvertiert, und zwar vor der Division. Ein andere Lösung ist es, die Variable „z“ explizit in einen Gleitkommawert umzuwandeln:

int z = 18;
float y =  (float) z / 4; 
System.out.print(y);

Bei dieser Version wird die ganze Zahl 4 implizit in eine Gleitkommazahl umgewandelt, da die Variable „z“ explizit in eine Gleitkommazahl umgewandelt wird, denn die Typumwandlung bindet stärker als der Bruchstrich (Operatorrangfolge). Die einzige Version ohne implizite Umwandlungen erfordert es, dass beide Parameter der Division Gleitkommazahlen sind, und lautet deshalb:

int z = 18;
float y =  (float) z / 4.0f;
System.out.print(y);

Siehe auch

Konvertierung (Informatik)


Wikimedia Foundation.

Игры ⚽ Нужна курсовая?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Strenge Typisierung — Starke Typisierung (engl. strong typing, daher oft auch strenge Typisierung) bezeichnet ein Schema der Typisierung von Programmiersprachen. Bei der starken Typisierung bleibt eine einmal durchgeführte Bindung zwischen Variable und Datentyp… …   Deutsch Wikipedia

  • Strong typing — Starke Typisierung (engl. strong typing, daher oft auch strenge Typisierung) bezeichnet ein Schema der Typisierung von Programmiersprachen. Bei der starken Typisierung bleibt eine einmal durchgeführte Bindung zwischen Variable und Datentyp… …   Deutsch Wikipedia

  • Is-a — Vererbung dargestellt mittels UML. Die abgeleitete Klasse hat die Attribute x und y und verfügt über die Methoden a und b (im UML Sprachgebrauch Operationen a und b). Die Vererbung (engl. Inheritance) ist eines der grundlegenden Konzepte der… …   Deutsch Wikipedia

  • Sprachelemente von C-Sharp — Dieser Artikel bietet eine Übersicht einiger Sprachelemente von C#. Inhaltsverzeichnis 1 Bedingte Ausführung (if, else, switch) 2 Schleifen (for, do, while, foreach) 3 Die Sprunganweisungen break, c …   Deutsch Wikipedia

  • Typfehler — Eine Typverletzung (engl. type conflict) liegt vor, wenn Datentypen nicht regelgemäß verwendet werden. Zum Beispiel werden Variablen Datentypen zugeordnet, womit ihr Wertebereich, also die Menge der zulässigen Belegungen der Variable mit einem… …   Deutsch Wikipedia

  • Typkonflikt — Eine Typverletzung (engl. type conflict) liegt vor, wenn Datentypen nicht regelgemäß verwendet werden. Zum Beispiel werden Variablen Datentypen zugeordnet, womit ihr Wertebereich, also die Menge der zulässigen Belegungen der Variable mit einem… …   Deutsch Wikipedia

  • Vererbung (Programmierung) — Vererbung dargestellt mittels UML. Die abgeleitete Klasse hat die Attribute x und y und verfügt über die Methoden a und b (im UML Sprachgebrauch Operationen a und b). Die Vererbung (engl. Inheritance) ist eines der grundlegenden Konzepte der… …   Deutsch Wikipedia

  • Vererbung (objektorientierte Programmierung) — Vererbung dargestellt mittels UML. Die abgeleitete Klasse hat die Attribute x und y und verfügt über die Methoden a und b (im UML Sprachgebrauch Operationen a und b). Die Vererbung (engl. Inheritance) ist eines der grundlegenden Konzepte der… …   Deutsch Wikipedia

  • CLU (Programmiersprache) — CLU ist eine Programmiersprache, die zwischen 1974 und 1975 am Massachusetts Institute of Technology von Barbara Liskov und ihren Studenten entwickelt wurde. CLU war laut Liskov die erste implementierte Programmiersprache, die eine direkte… …   Deutsch Wikipedia

  • Standard C Library — Die Standard C Library ist eine genormte Funktionsbibliothek für die Programmiersprache C, die etwa 200 häufig benötigte Funktionen für Ein und Ausgabe, mathematische Operationen, Verarbeitung von Zeichenketten, Speicherverwaltung und andere… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”