2.5 Primitive Datentypen

Ähnliche Dokumente
Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Java I Vorlesung Imperatives Programmieren

Informatik Vorkurs - Vorlesung 2

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java für Anfänger Teil 5: Basistypen 2. Programmierkurs Manfred Jackel

Einstieg in die Informatik mit Java

Grundlagen der Programmierung

Abschnitt 2: Daten und Algorithmen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Ein erstes Java-Programm

Hello World! Eine Einführung in das Programmieren Variablen

Projekt 3 Variablen und Operatoren

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Elementare Konzepte von

Primitive Datentypen und Felder (Arrays)

Einstieg in die Informatik mit Java

Schwerpunkte. 8. Ausdrücke, Operatoren (einfache Typen) Beispiel: Schaltjahr Test. Einführendes Beispiel: Grundprobleme

2.1 Fundamentale Typen

Grundlagen der Informatik Ergänzungen WS 2007/2008 Prof. Dr. Rainer Lütticke

5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?)

3. Datentypen, Ausdrücke und Operatoren

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings

Variablen. CoMa-Übung VIII TU Berlin. CoMa-Übung VIII (TU Berlin) Variablen / 15

Gegeben sind die folgenden Programmausschnitte: I. Programmausschnitt: II. Programmausschnitt: III. Programmausschnitt: IV. Programmausschnitt:

Kapitel 05. Datentypen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Gleitkommazahlen. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 74

Grundlagen der Technischen Informatik. 4. Übung

Grundlagen der Technischen Informatik. 4. Übung

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

5.1 Basistypen. Wie viele Werte kann man mit n Bit darstellen? 30. Jan Felix Brandt, Harald Räcke 70/596

Inhaltsangabe 3.1 Zahlensysteme und Darstellung natürlicher Zahlen Darstellung ganzer Zahlen

Kapitel 2: Ausdrücke. 1. Sorten und abstrakte Datentypen. 2. Ausdrücke 2.1 Syntax 2.2 Semantik 2.3 Ausdrücke in Java. 3. Funktionale Algorithmen

Teil I. Konzepte imperativer Programmierung

Die Zahl ist: (z 2, z 1, z 0 ) (z ) : 7 = 0 Rest z 2

Basiswissen in Informatik

Vorkurs Informatik WiSe 16/17

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Einstieg in die Informatik mit Java

Grundlagen der Technischen Informatik. 4. Übung

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

N Bit Darstellung von Gleitkommazahlen

Wertebereiche, Overflow und Underflow

Grundlagen der Technischen Informatik. 4. Übung

Kapitel 4. Programmierkurs. Arten von Datentypen. Datentypen

3. Operatoren und Ausdrücke

Einführung in die Informatik. Processing Numbers

Einführung in die Informatik. Processing Numbers. Motivation. Primitive Datentypen. Operatoren versus Methoden

3. Operatoren und Ausdrücke

Institut für Programmierung und Reaktive Systeme. Java 3. Markus Reschke

Software Entwicklung 1

3. Datentypen, Ausdrücke und Operatoren

Grunddatentypen, Ausdrücke und Variablen Typkonversion, Überprüfen und Auswerten von Ausdrücken

Vorlesung Programmieren

Informatik I (D-MAVT)

3. Operatoren und Ausdrücke

Einführung in die Programmierung

Java ist statisch typisiert, d.h., Variablen, Ergebnisse von Ausdrücken, etc. haben einen Datentyp, der schon bei der Kompilierung festgelegt wird.

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

8. Ausdrücke, Operatoren (einfache Typen)

C-Programmierkurs Mathematik

4. Daten. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Der Zahlenformatstandard IEEE 754

Tag 2 Repetitorium Informatik (Java)

Grundlagen der Technischen Informatik. 4. Übung

Übungen zur Vorlesung Wissenschaftliches Rechnen I

5.3 Auswertung von Ausdrücken

Grunddatentypen, Ausdrücke und Variablen Typkonversion, Überprüfen und Auswerten von Ausdrücken

Übersicht. Peter Sobe 1

Einstieg in die Informatik mit Java

Rechnerstrukturen, Teil 1. Vorlesung 4 SWS WS 15/16

3/4/2009. Schalter: Ein vs. Aus Lochkarten: Loch vs. Kein Loch Boolean/Wahrheitswerte: true vs. false

1. Grundlegende Konzepte der Informatik

Variablen, Konstanten und Datentypen

Semantik von Ausdrücken

Kapitel 2: Python: Ausdrücke und Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Datentypen und Operatoren Ganzzahlige Numerische Datentypen Logischer Datentyp

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16

Grunddatentypen in Java. Kapitel 3: Grunddatentypen, Ausdrücke und Variablen. Ganze Zahlen in Java. Grammatik für Grunddatentypen in Java

Programmiervorkurs Einführung in Java Tag 1

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

Einfache Rechenstrukturen und Kontrollfluss

Computer-orientierte Mathematik

4. Zahlendarstellungen

Informationsdarstellung 2.2

2. Programmierung in C

8. Ausdrücke, Operatoren (einfache Typen)

Transkript:

2.5 Primitive Datentypen Wir unterscheiden 5 primitive Datentypen: ganze Zahlen -2, -1, -0, -1, -2,... reelle Zahlen 0.3, 0.3333..., π, 2.7 10 4 Zeichen a, b, c,... Zeichenreihen "Hello World", "TIFI", "%$&", "",... Wahrheitswerte false,true Zeichenreihen sind eigentlich kein primitiver Datentyp. Wir behandeln sie hier aber dennoch. Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 88

Vier Repräsentationen ganzer Zahlen Datentyp Größe Darstellungsbereich byte 1 Byte -128,..., 127 short 2 Byte -32768,...,32767 int 4 Byte -21474833648,..., 21474833647 long 8 Byte -9223372036854775808,..., 9223372036854775807 Allgemein: k Bytes enthalten n = 8k Bits. Mit diesen werden die Zahlen 2 n 1,..., 2 n 1 1 dargestellt. Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 89

Darstellung ganzer Zahlen im 2-Komplement Im 2-Komplement mit n Bits repräsentiert die Bitfolge d n 1... d 0 die ganze Zahl x = d n 1 2 n 1 + P n 2 i=0 d i2 i Beispiel: n = 4, x = d 3 2 3 + P 2 i=0 d i2 i d 3 d 2 d 1 d 0 x 0 1 1 1 7 0 1 1 0 6 0. 1 0 1 5. 0 0 0 0 0 1 1 1 1-1 1 1 1 0-2 1. 1 0 1-3. 1 0 0 1-7 1 0 0 0-8 Berechnung des n-bit 2-Komplements einer Zahl x 0: for (i=0; i<=n-2; i++) { Out.println(x%2); x = x/2; } /* Bitreihenfolge beachten! */ Out.println(0); /* Vorzeichenbit für x 0 */ Berechnung des n-bit 2-Komplements einer Zahl x < 0: 1) berechne die d i für x wie oben; 2) invertiere alle Bits 3) addiere 1 Bsp. für x = 7 x = 0111 invertieren: 1000 1 addieren: 1001 Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 90

Darstellung ganzer Zahlen im 2-Komplement Im 2-Komplement mit n Bits repräsentiert die Bitfolge d n 1... d 0 die ganze Zahl x = d n 1 2 n 1 + P n 2 i=0 d i2 i Beispiel: n = 4, x = d 3 2 3 + P 2 i=0 d i2 i d 3 d 2 d 1 d 0 x 0 1 1 1 7 0 1 1 0 6 0. 1 0 1 5. 0 0 0 0 0 1 1 1 1-1 1 1 1 0-2 1. 1 0 1-3. 1 0 0 1-7 1 0 0 0-8 Addition zweier Zahlen im 2-Komplement: 0 0 1 1 3 + 1 0 1 1-5 = 1 1 1 0-2 Überlauftest bei Addition zweier Zahlen im 2-Komplement: Schreibe das jeweils erste Bit noch einmal hin. Addiere ganz normal und vergleiche die ersten beiden Bits des Ergebnisses. Bei Gleichheit ist das Ergebnis OK, sonst nicht. 0 0 1 1 1 7 + 0 0 0 0 1 1 = 0 1 0 0 0-8 Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 91

Zwei Repräsentationen reeller Zahlen Datentyp Größe Vorzeichen Exponent Mantisse float 4 Byte 1 Bit 8 Bits 23 Bits double 8 Byte 1 Bit 11 Bits 52 Bits Die Repräsentationen float und double heißen Gleitkommazahlen. Die Codierung von Gleitkommazahlen x ist dreigeteilt: X XXXXXXXX... XXXXXXXXXXXXXXXXXXXXXXX... Vorzeichen s Exponent e Mantisse f s = 0 genau dann wenn die Gleitkommazahl x 0 ist. e liefert den Exponenten für einen Faktor 2 z. f = f 1 f 2... f k wird interpretiert als P k i=1 f i 2 i, d.h. als eine Zahl aus [0, 1[. Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 92

Zwei Repräsentationen reeller Zahlen Datentyp Größe Vorzeichen Exponent Mantisse float 4 Byte 1 Bit 8 Bits 23 Bits double 8 Byte 1 Bit 11 Bits 52 Bits X XXXXXXXX... XXXXXXXXXXXXXXXXXXXXXXX... Vorzeichen s Exponent e Mantisse f Wert(float) = 8 < : ( 1) s 2 e 127 1.f falls 0 < e < 255 (normalisiert) ( 1) s 2 126 0.f falls e = 0 (subnormal) ( 1) s falls e = 255 (unendlich, NaN) Wert(double) = 8 < : ( 1) s 2 e 1023 1.f falls 0 < e < 2047 (normalisiert) ( 1) s 2 1022 0.f falls e = 0 (subnormal) ( 1) s falls e = 2047 (unendlich, NaN) Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 93

Größte und kleinste darstellbare Gleitkommazahlen Die größte mit float darstellbare Zahl liegt knapp unter 2 254 127 {z } e=254 2 {z} f=1 2 23 = 2 128 3.4 10 38 0 11111110 11111111111111111111111 Vorzeichen Exponent Mantisse Die kleinste positive mit float darstellbare Zahl ist 2 126 {z } e=0 2 23 {z} f=2 23 = 2 149 1.4 10 45 0 00000000 00000000000000000000001 Vorzeichen Exponent Mantisse Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 94

Größte und kleinste darstellbare Gleitkommazahlen Die größte mit double darstellbare Zahl liegt knapp unter 2 2046 1023 {z } e=2046 2 {z} f=1 2 52 = 2 1024 1.8 10 308 0 11111111110 1111111111111111111111111111111111111111111111111111 Vorzeichen Exponent Mantisse Die kleinste positive mit double darstellbare Zahl ist 2 1022 2 52 = 2 1074 4.9 10 324 0 00000000000 0000000000000000000000000000000000000000000000000001 Vorzeichen Exponent Mantisse Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 95

Addition und Multiplikation von Gleitkommazahlen Multiplikation: (Exponenten addieren, Mantissen multiplizieren) Beispiel (float): 12 20 = 1.5 2 3 1.25 2 4 = 1.5 1.25 2 3 2 4 = 1.875 2 7 = 240 Addition: (Exponenten angleichen, Mantissen addieren) Beispiel (float): 12 + 20 = 1.5 2 3 + 1.25 2 4 = 0.75 2 4 + 1.25 2 4 = (0.75 + 1.25) 2 4 = 1 2 5 = 32 Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 96

Genauigkeit und Fehler bei Gleitkommazahlen Beispiel: 1024 + 1 1048576 = 1 2 10 + 1 2 20 = 1 2 10 + 2 30 2 10 = 1 2 10 + 0 2 10 = 1024 Bei 23 Bits für die Mantisse ist 2 30 nicht mehr darstellbar. In der Gleitkommaarithmetik hat die Gleichung (1 + x) = 1 für x > 0 Lösungen (wähle x wie im obigen Beispiel klein genug)! Die kleinste positive darstellbare Zahl ɛ, für die in der Gleitkommaarithmetik 1 + ɛ > 1 gilt, heißt Maschinengenauigkeit. Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 97

Fehler und Geschwindigkeit bei Gleitkommazahlen Assoziativgesetz und Distributivgesetz gelten in der Gleitkommaarithmetik nicht: (x + y) + z Gɛ x + (y + z) bzw. x (y + z) Gɛ x y + x z Beweis (Nichtassoziativität): Es sei ε die Maschinengenauigkeit. 1 + ( ε 2 + ε 2 ) = Gε 1 + ε Gε 1 = Gε 1 + ε 2 = Gε (1 + ε 2 ) + ε 2 Gleitkommazahlen können gerundete Näherungen reller Zahlen sein. Durch gerundete Näherungen entstehen Rundungsfehler. Rundungsfehler können sich in Rechnungen fortpflanzen und wachsen. Die Numerik beschäftigt sich mit dem bedachten Umgang mit Gleitkommazahlen! Gleitkommaarithmetik ist deutlich langsamer als Ganzzahlarithmetik. Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 98

Der Datentyp Character (char) char dienen zur Darstellung von Zeichen. Codierung: 2 Byte breite Zahlen. Für Java gewählte Standardcodierung: Unicode (www.unicode.org/charts). Zeichen... 1 2... A B... a b... Codierung 49 50 65 66 97 98 Durch die Codierung in Zahlen kann man chars vergleichen (<,<=,!=,...). Also gilt 0 < 1 <... < A < B <... < a < b <... Es gibt Sonderzeichen, die durch Escape-Sequenzen dargestellt werden: \n repräsentiert den Zeilenumbruch. \r repräsentiert den Cursorrücklauf. \ repräsentiert das Apostroph. \\ repräsentiert den Backslash.... Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 99

Zeichenreihen (Strings) Strings sind Folgen von chars. Darstellung in Java in Doppelhochkommata "bla" statt Hochkommata a (wie bei char). String ist eigentlich kein primitiver Datentyp sondern eine Java-Klasse, die in einer Standard- Bibliothek implementiert ist. Für Strings gibt es viele nützliche Operationen: String a = a + "Wld"; // hängt dem String, auf den a verweist, den String "Wld" an. int b = a.length(); // legt die Anzahl der chars im String a in der Variablen b ab. char c = a.charat(3); // speichert das dritte Zeichen des Strings a unter c ab. int i = a.indexof("sub"); // liefert die Position des ersten Auftretens des Substrings "sub" im String a und speichert sie in der Variablen i; int j = Integer.parseInt("123"); // Speichert den Wert 123, der als String eingelesen wird, als ganzzahligen Wert in der Variablen j ab. Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 100

Typisierung In Java haben Variablen einen eindeutig definierten Typ. Der Typ wird bei der Deklaration festgelegt: Konstanten int n; double x; Der Wert einer Variablen kann durch Verwendung des Schlüsselworts final fixiert werden: final int MAX GRAD = 360; final double PI = 3.1415926536; Solche benannten Konstanten können die Lesbarkeit verbessern. Sie können die Programmierarbeit erleichtern. Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 101

Variablendeklaration Syntax <VarDekl> ::= <Typ> <Bezeichner>[ = <Ausdruck>] {, <Bezeichner>[ = <Ausdruck>]} <Bezeichner> ::= <Buchstabe> {<Buchstabe> <Ziffer>} <Typ> ::= int long byte short double float char String Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 102

Typisierung von Ausdrücken Operatoren Abhängig vom Typ der Operanden ist für jeden Operator festgelegt, welchen Typ das Ergebnis hat: Ausdrücke int n,m; double x,y; 1 2 \\ Ergebnis ist vom Typ int n + m \\ Ergebnis ist vom Typ int x / y \\ Ergebnis ist vom Typ double x < y \\ Ergebnis ist vom Typ boolean Der Ergebnistyp eines Ausdrucks ergibt sich induktiv anhand seines Ableitungsbaumes. Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 103

Polymorphie (Überladung) Der Operator + ist für die Addition von Integern vergeben. Wir möchten aber auch zwei Zahlen vom Typ double mit demselben Symbol addieren! Lösung: Überladen des Operators + : Die Typen der Operanden sind bekannt. Man kann sie benutzen, um den Operator eindeutig zu identifizieren. So wird der Operator + "vielgestaltig"(polymorph):.+. : int int int.+. : double double double.+. : String String String Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 104

Implizite Typumwandlungen Durch Konvertierung (Umwandlung) von Typen werden Operatoren noch mehr Gestalten gegeben:. +. : int double double. +. : int String String. +. : double String String Dabei wird der Wert der Variable vom Typ int vor Ausführung des + -Operators in den Wert einer Variable vom Typ double umgerechnet. Wenn keine Daten verloren gehen, wird eine solche Umwandlung automatisch vorgenommen (implizite Typumwandlung). Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 105

Explizite Typumwandlungen Implizite Typumwandlungen existieren nicht für alle Operationen. Manchmal sind implizite Typumwandlungen auch unerwünscht. Daher kann man explizit angeben wie umgewandelt werden soll: <TypeCast> ::= ( <Typ> ) <Ausdruck> Achtung: Der TypeCast-Operator bindet stärker als die numerischen Operatoren. Klammern setzen hilft auch hier: short s; int n; (short) s + n; /* Ergebnis ist vom Typ int(!) */ (short) (s + n); /* Ergebnis ist vom Typ short */ Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 106

Implizite und explizite Typumwandlungen double float long int short byte Der kleinere Operandentyp wird vor der Ausführung der Operation in den größeren Operandentyp konvertiert. Der Ausdruck bekommt dann den gleichen Typ wie seine Operanden, zumindest aber den Typ int. Beispiele: double d; float f; int i; short s; String str; f = i; d = 3.14; f = 3.14f; /* ok */ i = f; f = 3.14; /* wrong */ i = (int) f; /* ok, aber Nachkommastellen gehen verloren */... f + i... /* ist float */... d*(f + i)... /* ist double */... s+s... /* ist int */... f/3... (float) i/3... /* sind float */... i/3... /* ist int */... str + i... str + f... str + d... str + s /* sind String */ Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 107