Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Datentyp- umwandlung.

Ähnliche Präsentationen


Präsentation zum Thema: "Datentyp- umwandlung."—  Präsentation transkript:

1 Datentyp- umwandlung

2 Literale (literale Konstanten) sind: Bezeichner mit einem festen Wert wie z.B:

3 237 (dezimale Angabe) 034 (oktale Angabe) 0x51f (hexadezimale Angabe) 3.14 (Fließkommazahl) 'x' (Zeichen) "abc" (Zeichenkette)

4 true (wahr) false (falsch)

5 Bemerkung:

6 Mit Hilfe des Verkettungsoperators + kann man Zeichenketten verketten:
"Max"+"Moritz" bedeutet dasselbe wie "MaxMoritz"

7 Literale sind dem Compiler bekannt und müssen nicht - wie Variable - deklariert (angemeldet) werden.

8 Welchen Datentyp hat ein Literal ?

9 Die folgende Anweisung macht Probleme:
System.out.println( ); Die Zahl wird von Java als int interpretiert. Da diese Zahl nicht im Wertebereich von int (also von bis ) liegt, gibt es eine Fehlermeldung.

10 Deshalb muss man dieser Zahl den Datentyp long geben
System.out.println( l); oder System.out.println( L);

11 Bemerkung: Man kann eine Zahl auch als float Zahl schreiben. Man muss sie dazu entsprechend bezeichnen: System.out.println(3.14f); oder System.out.println(3.14F);

12 Einer Fließkommazahl (Literal) wird der folgende Datentyp zugeordnet:
double

13 Beispiel: ... double d; float f; d = 2.718; f = 3.14; ...
korrekt, weil den Datentyp double hat ... double d; float f; d = 2.718; f = 3.14; ... Fehler: 3.14 hat den Datentyp double und f den Datentyp float

14 Beispiel: Welchen Datentyp hat 2*3, 1.9*2.1 und 4/5 ? ... int i,j;
double d; i=2*3; d=1.9*2.1; j=4/5; ...

15 Merke:

16 int + int = int int - int = int int * int = int int / int = int
float + float = float float - float = float float * float = float float / float = float Welche der Regeln widerspricht unserer Alltagsmathematik? double + double = double double - double = double double * double = double double / double = double Weil z.B. 3/10 keine ganze Zahl (integer) ergibt.

17 Welche Datentypen haben also die folgenden Ergebnisse:
double double double * double = double 1.9 * 2.1 Ergebnis: 3.99 double

18 double /double = double
3.0 / 2.0 Ergebnis: 1.5 double

19 integer * integer = integer
2 * 3 Ergebnis: 6 integer

20 integer / integer = integer
8 / 5 integer / integer = integer Ergebnis: Der Nachkommateil von 8/5 = 1.6 (also 0.6) wird entfernt. Also ist das Ergebnis: 1 integer

21 Verschiedene Datentypen in einem Ausdruck
Problem: Verschiedene Datentypen in einem Ausdruck Welchen Datentyp hat der gesamte Ausdruck ?

22 Beispiel:

23 Welchen Datentyp hat i*d ?
... int i; double d; double erg; i=2; d=3.14; erg=i*d; ... Welchen Datentyp hat i*d ?

24 Antwort: Gemischte Datentypen werden nicht akkzeptiert !!! Deshalb muss vorher eine Datentyp-Umwandlung gemacht werden !!!

25 - numerischen Datentypen. - Referenztypen (siehe später)
Es kann nicht jeder Datentyp in einen beliebigen anderen umgewandelt werden. Umwandlungen sind nur möglich zwischen: - numerischen Datentypen. - Referenztypen (siehe später)

26 Bei der Datentypumwandlung gibt es zwei Möglichkeiten:

27 Implizite Typumwandlung (macht der Compiler selbst, ohne Zutun des Programmierers)
Explizite Typumwandlung mit dem cast-Operator (muss der Programmierer machen)

28 cast ist ein englisches Wort und bedeutet auf deutsch:
"in eine Form gießen"

29 Implizite Typumwandlung:
wandelt alle "kleineren" Datentypen in die "grösseren" um.

30 double float long int short byte grösser

31 Regel (für implizite Umwandlungen): 1) Rechenoperationen (rechts einer Zuweisung mit =):
Bei Rechenoperationen (z.B. mit *), in denen 2 Variablen (oder Zahlen) mit unterschiedlichen Datentypen vorkommen, wird zuerst der kleinere Datentyp in den grösseren umgewandelt. Damit hat man dann gleiche Datentypen!

32 2) Ist einer der verschiedenen Datentypen short bzw. byte, so werden beide sofort in int umgewandelt. (für uns unwichtig)

33 3) Zuweisungen a) Fall: links des Zuweisungsoperators = befindet sich der größere, rechts von = der kleinere Datentyp: Dann wird zuerst der kleinere Datentyp rechts des Gleichheitszeichens in den größeren links des Gleicheitszeichens umgewandelt und dann in die Variable links des Gleichheitszeichens kopiert.

34 3) Zuweisungen b) Fall: links des Zuweisungsoperators = befindet sich der kleinere, rechts von = der größere Datentyp: Da hier versucht wird, etwas "Größeres" in etwas "Kleineres" zu kopieren, gibt der Kompiler eine Fehlermeldung.

35 Beispiel:

36 ... int i; double d; double erg; i=2; d=3.14; erg=i*d; ...
Welchen Datentyp hat i*d ? wird umgewandelt in double, also: 2.0 double, also: 3.14 //double: erg=6.28 double * double = double

37 kleinere Datentyp (float) wird in den größeren (double) umgewandelt
... double d; d = F; ... kleinere Datentyp (float) wird in den größeren (double) umgewandelt

38 Explizite Typumwandlung
(mit cast-Operator): Wandelt mit dem cast-Operator ( ) den Datentyp um.

39 Beispiel:

40 double * double = double, also: 6.28
... int i; double d; double erg; i=2; d=3.14; erg=d*(double)i; ... double, also 3.14 double, also: 2.0 integer, also: 2 double * double = double, also: 6.28

41 Was passiert, wenn der cast Operator fehlen würde?
... int i; double d; double erg; i=2; d=3.14; erg=d*(double)i; ... Was passiert, wenn der cast Operator fehlen würde? Es gibt keine Fehlermeldung, weil dann i implizit in double umgewandelt wird.

42 Beispiel:

43 integer * integer = integer, also: 6
... int i; double d; int erg ; i=2; d=3.14; erg=i*(int)d; ... integer, also 2 integer, also: 3 double, also: 3.14 integer * integer = integer, also: 6

44 Beispiel: genauso wie das letzte Beispiel, außer daß jetzt erg den Datentyp double hat

45 integer * integer = integer, also: 6
... int i; double d; double erg ; i=2; d=3.14; erg=i*(int)d; ... integer, also 2 integer, also: 3 double, also: 3.14 Kein FEHLER: Da der kleinere Datentyp int in den größeren Datentyp double abgespeichert wird! integer * integer = integer, also: 6

46 anschaulich: Man kann den Inhalt eines Schnapsglases in eine Badewanne leeren, weil dabei die Badewanne nicht überläuft. Es wird nichts verschüttet!

47 Beispiel:

48 ... int i; double d; int erg ; i=2; d=3.14; erg=i*d; ...
integer, also 2 double, also: 3.14 wird umgewandelt in double, also: 2.0 double, also: 3.14 FEHLER: Da der größere Datentyp double in den kleineren Datentyp int abgespeichert werden soll! double * double = double

49 anschaulich: Man kann zwar den Inhalt eines Schnapsglases in eine Badewanne leeren, aber beim umgekehrten Vorgang würde das Schnapsglas überlaufen und Flüssigkeit verschüttet werden (sich der Inhalt auf dem Teppichboden verteilen...)

50 Beispiel:

51 ... double d = 2.718f; float f = 3.14; ... Kein FEHLER: Da der kleinere Datentyp float (durch das f bei 2.718f wird 2.718f vom Kompiler immer als float aufgefaßt) in den größeren Datentyp double abgespeichert wird! FEHLER: Da der größere Datentyp double (3.14 wird vom Kompiler immer als double aufgefaßt) in den kleineren Datentyp float abgespeichert werden soll!


Herunterladen ppt "Datentyp- umwandlung."

Ähnliche Präsentationen


Google-Anzeigen