<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Typumwandlung</id>
	<title>Typumwandlung - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Typumwandlung"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Typumwandlung&amp;action=history"/>
	<updated>2026-06-06T10:40:43Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Typumwandlung&amp;diff=125008&amp;oldid=prev</id>
		<title>imported&gt;Daniel5Ko: Java ist kein Beispiel. long &amp;rarr; double ist implizit und verlustbehaftet.</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Typumwandlung&amp;diff=125008&amp;oldid=prev"/>
		<updated>2023-10-01T21:55:17Z</updated>

		<summary type="html">&lt;p&gt;Java ist kein Beispiel. long → double ist implizit und verlustbehaftet.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Als &amp;#039;&amp;#039;&amp;#039;Typumwandlung&amp;#039;&amp;#039;&amp;#039; ({{enS|&amp;#039;&amp;#039;type conversion&amp;#039;&amp;#039;}} oder {{lang|en|&amp;#039;&amp;#039;type casting&amp;#039;&amp;#039;}}, kurz &amp;#039;&amp;#039;cast&amp;#039;&amp;#039;) wird in der [[Informatik]] die Umwandlung eines [[Daten|Datums]] von einem [[Datentyp]] in einen anderen bezeichnet. Dadurch werden [[Typverletzung]]en vermieden, die durch mangelnde [[Zuweisungskompatibilität]] entstehen.&lt;br /&gt;
&lt;br /&gt;
Hierbei unterscheidet man zwischen&lt;br /&gt;
# expliziter und impliziter Typumwandlung;&lt;br /&gt;
# werterhaltender und verlustbehafteter Typumwandlung;&lt;br /&gt;
# benutzerdefinierter und vordefinierter (“built-in”) Typumwandlung.&lt;br /&gt;
&lt;br /&gt;
Bei der expliziten Typumwandlung wird die Typumwandlung im [[Programmcode]] ausdrücklich hingeschrieben. Je nach [[Typisierung (Informatik)|Typisierung]] der verwendeten [[Programmiersprache]] kann das Fehlen der expliziten Angabe der Typumwandlung einen [[Laufzeit (Informatik)|Laufzeit]]- oder [[Compilezeit]]-Fehler zur Folge haben. Im Unterschied dazu erscheinen implizite Typumwandlungen nicht im [[Quelltext]]. Sie erfolgen entweder nach Vorschriften, die durch die Programmiersprache vorgegeben sind, oder gemäß einem vom [[Programmierer]] an einer anderen Stelle im Quelltext festgelegten Verfahren.&lt;br /&gt;
&lt;br /&gt;
Eine Typumwandlung ist werterhaltend, wenn alle im Ausgangstyp darstellbaren Werte auch im Zieltyp darstellbar sind, so dass sich der Wert, also das umgewandelte Datum, auf keinen Fall ändert. Anderenfalls nennt man sie verlustbehaftet. Implizite Typumwandlungen können eine Fehlerquelle sein, indem versehentlich eine verlustbehaftete Umwandlung verursacht wird. Deshalb erlauben viele Programmiersprachen eine implizite Typumwandlung nur dann, wenn sie werterhaltend ist.&lt;br /&gt;
&lt;br /&gt;
== Typerweiterung und Typeinschränkung ==&lt;br /&gt;
Da unterschiedliche [[Datentyp]]en oftmals unterschiedliche Wertebereiche haben, können bei der Typumwandlung &amp;#039;&amp;#039;&amp;#039;Typerweiterungen&amp;#039;&amp;#039;&amp;#039;, also Vergrößerungen des Wertebereichs, oder &amp;#039;&amp;#039;&amp;#039;Typeinschränkung&amp;#039;&amp;#039;&amp;#039;, also Verkleinerungen des Wertebereichs, vorkommen.&lt;br /&gt;
&lt;br /&gt;
Wird beispielsweise ein [[Integer (Datentyp)|Integer]] mit einer Größe von 16 Bit in einen 32 Bit großen Integer umgewandelt, handelt es sich um eine Typerweiterung. Im umgekehrten Fall wäre dies eine Typeinschränkung.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Explizite Typumwandlung&lt;br /&gt;
int i = 100;&lt;br /&gt;
byte b = (byte) i;&lt;br /&gt;
&lt;br /&gt;
// Implizite Typumwandlung&lt;br /&gt;
int j = 12;&lt;br /&gt;
double d = j;&lt;br /&gt;
&lt;br /&gt;
// Bei Zeichenketten wird beim expliziten umwandeln String.valueOf(x)&lt;br /&gt;
// bzw. bei Objekten x.toString() aufgerufen:&lt;br /&gt;
&lt;br /&gt;
int i = 164;&lt;br /&gt;
String str = String.valueOf(i);&lt;br /&gt;
&lt;br /&gt;
// Implizite Typumwandlung bei Zeichenketten&lt;br /&gt;
&lt;br /&gt;
int i = 164;&lt;br /&gt;
String str = &amp;quot;&amp;quot; + i;&lt;br /&gt;
&lt;br /&gt;
// Anwendungsbeispiel der expliziten Typumwandlung:&lt;br /&gt;
int g = 9;&lt;br /&gt;
int n = 2;&lt;br /&gt;
double e = g/n; // e ist nicht 4.5, sondern 4.0, da eine Ganzzahldivison erfolgt, deren Ergebnis 4 ist.&lt;br /&gt;
                // Anschließend findet erst die Typumwandlung auf double statt und e weist den Wert 4.0 auf&lt;br /&gt;
// Um dieses Verhalten zu umgehen, kann man eine explizite Typumwandlung benutzen:&lt;br /&gt;
double y = g / (double)n;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== C# ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
Geraet geraet = new Computer();&lt;br /&gt;
&lt;br /&gt;
Bildschirm bildschirm = (Bildschirm) geraet;  // Wenn (geraet is Bildschirm), stat.type(geraet) is Bildschirm, sonst wird eine Exception geworfen&lt;br /&gt;
bildschirm = geraet as Bildschirm;  // Wenn (geraet is Bildschirm), bildschirm = (Bildschirm) geraet, sonst bildschirm = null&lt;br /&gt;
&lt;br /&gt;
geraet = null;&lt;br /&gt;
bildschirm = geraet as Bildschirm;  // bildschirm == null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== C++ ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
Geraet* geraet = new Computer;&lt;br /&gt;
&lt;br /&gt;
Bildschirm* bildschirm = static_cast&amp;lt;Bildschirm*&amp;gt;(geraet);  // Kompiliert nur, wenn entweder Geraet or Bildschirm von der anderen oder derselben Klasse abgeleitet ist&lt;br /&gt;
bildschirm = dynamic_cast&amp;lt;Bildschirm*&amp;gt;(geraet);  // Wenn (geraet is Bildschirm), dann bildschirm = (Bildschirm*) geraet, sonst bildschirm = nullptr&lt;br /&gt;
&lt;br /&gt;
Bildschirm&amp;amp; bildschirmR = static_cast&amp;lt;Bildschirm&amp;amp;&amp;gt;(*geraet);  // Wie oben, aber eine Exception wird geworfen, wenn ein nullptr zurückgegeben wird&lt;br /&gt;
&lt;br /&gt;
geraet = nullptr;&lt;br /&gt;
bildschirm = dynamic_cast&amp;lt;Bildschirm*&amp;gt;(geraet);  // bildschirm == nullptr&lt;br /&gt;
&lt;br /&gt;
delete geraet;  // gibt die Ressourcen frei&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Implizite Typumwandlung als Fehlerquelle:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
int main() {&lt;br /&gt;
  int a = -4;&lt;br /&gt;
  unsigned b = 5;&lt;br /&gt;
  if (a &amp;gt; b) cout &amp;lt;&amp;lt; &amp;quot;Fehler&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Hier wird &amp;#039;&amp;#039;a&amp;#039;&amp;#039; implizit von &amp;#039;&amp;#039;int&amp;#039;&amp;#039; nach &amp;#039;&amp;#039;unsigned&amp;#039;&amp;#039; gewandelt, und da im Zieltyp keine negativen Zahlen darstellbar sind, ändert sich der Wert. Das Resultat ist laut den Regeln der Ganzzahlumwandlung kongruent zu -4 modulo der Zahl der im vorzeichenlosen Zieltyp darstellbaren Werte, also &amp;lt;math&amp;gt;2^{32}-4&amp;lt;/math&amp;gt;, wenn &amp;#039;&amp;#039;unsigned&amp;#039;&amp;#039; 32 Bit lang ist.&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Konvertierung (Informatik)]]&lt;br /&gt;
* [[Typverletzung]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html Java Language Specification - Conversions and Promotions]&lt;br /&gt;
* [https://www.geeksforgeeks.org/type-conversion-java-examples/ Type conversion in Java with Examples]&lt;br /&gt;
* [https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/casting-and-type-conversions Casting and type conversions (C# Programming Guide)]&lt;br /&gt;
* [https://www.geeksforgeeks.org/c-sharp-type-casting/ C# | Type Casting]&lt;br /&gt;
* [https://loomcom.com/blog/0097_the_wats_of_javascript.html The WATs of JavaScript]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Datentyp]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Daniel5Ko</name></author>
	</entry>
</feed>