Datentyp- umwandlung.

Slides:



Advertisements
Ähnliche Präsentationen
ALP II: Objektorientierte Programmierung Sommersemester 2006
Advertisements

der Universität Oldenburg
3. Operatoren und Ausdrücke
Forschungszentrum caesar
Variablen und Datentypen
Algorithmus. Ein Kochrezept, zum Beispiel: Kartoffelbrei.
C- Syntax. Bestandteile der Sprache C: Ausdrücke Anweisungen.
Datentyp- umwandlung. Literale sind: Bezeichner mit einem festen Wert wie z.B:
ARRAY oder FELD oder VEKTOR
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
Objekte und Arbeitsspeicher
Der Präprozessor. Bevor der Compiler das Programm in Maschinencode übersetzt (nur dieser kann von der CPU, dem Herz des Computers, bearbeitet werden)
Exceptions. import java.sql.*; public class MyException{ boolean b; Statement stat; public MyException(){ b = stat.execute("xyz"); } Beim Übersetzen dieses.
Java- Syntax.
ARRAY oder FELD oder VEKTOR
Basisinformationstechnologie WS 2003/04 T.Schaßan
Robotik mit LEGO Mindstorms
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Imperative Programmierung
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Zusammenfassung Vorwoche
Semantische Fehler Seminar im Grundstudium WS2002/2003:
Wichtige Fachausdrücke in C
Variablen in Programmiersprachen
© 2004 Pohlig - Taulien Explizite Typenumwandlung.
Datentypen: integer, char, string, boolean
Agenda für heute, 12. Mai, 2005 ProzedurenProzeduren Funktionsprozeduren Prozedurparameter Lokale und globale Variablen Datentypen: Ordinaltypen.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Datentypen Überblick Datentypen Einfache / fundamentale Datentypen
Programmieren in C Grundlagen C 2
BMEVIEEA100 Grundlagen der Programmierung
Hochschule Fulda – FB ET Sommersemester 2014
Programmieren in C Grundlagen C 2
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Einführung in die Programmierung mit Java
Sequenzen: Lineare Programme
Variablen und Datentypen
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Namensräume (namespaces). verwendet man umfangreiche eigene und fremde Bibliotheken (Sammlungen von Funktionen) so ist die Wahrscheinlichkeit groß, daß.
TRUE und FALSE in C Der Wert 0 steht für FALSE Jeder von 0 verschiedene Wert steht für TRUE FALSE wird als 0 dargestellt TRUE wird als 1 dargestellt.
Tutorium Software-Engineering SS14 Florian Manghofer.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Tutorium Software-Engineering SS14 Florian Manghofer.
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
1 Arrays und Schleifen Özgü & Tim. 2 Inhaltsverzeichnis Arrays Was ist ein Array? Bauanleitung Beispiel Matrix Fehler Schleifen Wofür Schleifen? While-Schleife.
Gleichung und ihre Lösung
Einführung in die Programmierung mit Java
Konstruktoren.
Hello World! Javakurs 2013 Arne Kappen
Datentypen: integer, char, string, boolean
Aufgaben zu Rückgabewerten
Wahrheitswerte.
Datentypen: integer, char, string, boolean
Klassen selbst programmieren
Java-Kurs - 2. Übung primitive Datentypen, Konstanten
Variable: typ varName = Wert Kiste: Art Aufschrift  Inhalt
SS 04 Christiane Rauh Christian Hellinger
Prof. J. Walter Bitte römische Zahlen im Geschichtsunterricht!
REKURSION + ITERATION.
Zufallszahlen in C erzeugen
Grundlagen der OO-Programmierung in C#
Explizite Typenumwandlung
Rechenausdrücke (Terme) – Fachbegriffe - Rechenregeln
 Präsentation transkript:

Datentyp- umwandlung

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

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

true (wahr) false (falsch)

Bemerkung:

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

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

Welchen Datentyp hat ein Literal ?

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

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

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);

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

Beispiel: ... double d; float f; d = 2.718; f = 3.14; ... korrekt, weil 2.718 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

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; ...

Merke:

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.

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

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

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

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

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

Beispiel:

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

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

- 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)

Bei der Datentypumwandlung gibt es zwei Möglichkeiten:

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

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

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

double float long int short byte grösser

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!

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

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.

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.

Beispiel:

... 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

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

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

Beispiel:

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

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.

Beispiel:

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

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

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

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

Beispiel:

... 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

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...)

Beispiel:

... 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!