Vorlesung

Werbung
Datenformate
DVG1 - Datenformate
1
Speicherhierarchie
Prozessor, Register, CPU
sehr schnell, sehr teuer, sehr klein
1 ns, 1 $/Byte, 1kByte
Hauptspeicher, RAM
schnell, mäßig teuer, mäßig groß
60 ns, 10-3 $/Byte, 1 GByte
Externe Speicher, Platten, Bänder
langsam, billig, riesig
10 ms...1 min, 10-9 $/Byte, 100 GByte...1 PByte
DVG1 - Datenformate
2
Kleinste Speichereinheit: 1bit
ja - nein
wahr - falsch
0-1
Strom fließt - Strom fließt nicht
Ladung gespeichert - Ladung nicht gespeichert
größere Mengen:
1 kbit = 1024 bit ~ 103 bit
1 Mbit = 1024 kbit = 1048576 bit ~ 106 bit
1 Gbit = 1024 Mbit = 1073741824 bit ~ 109 bit
1 Tbit = 1024 Gbit = 1099511627776 bit ~ 1012 bit
1 Pbit = 1024 Tbit = 1125899906842624 bit ~ 1015 bit
.......
DVG1 - Datenformate
3
drei bit werden zu einer Oktalziffer zusammengefaßt
000...111
0...7
Zahlen, die mit einer „0“ beginnen werden als Oktalzahlen interpretiert.
vier bit werden zu einer Hexadezimalziffer zusammengefaßt
0000 ... 1111
0 ... F
Zahlen, die mit „0x“ beginnen werden als Hexadezimalzahlen interpretiert.
8 bit = 1 Byte
00000000 ... 11111111
0 ... 255
Analog bit gibt es kByte, MByte, GByte, TByte, Pbyte ...
Byte: 0x00 ... 0xFF
DVG1 - Datenformate
4
Primitive Datentypen





Allgemeine Form:
typ name = wert;
z.B.:
int i = 12;
Variable „name“ mit dem Typ „typ“ wird direkt im Speicher angelegt
und mit dem Wert „wert“ initialisiert.
Wird
typ name;
benutzt, werden die Standardwerte zur Initialisierung benutzt.
Standardwert ist immer „alle bits 0“.
Zu jedem primitiven Datentyp gibt es einen „Wrapper Typ“ (Umschlag
Typ). Mit dieser kann man Objekte von dem Typ mit „new“ erzeugen.
DVG1 - Datenformate
5
boolean





Logischer Wahrheitswert
Ergebnis logischer Operationen
mögliche Werte: false, true
Standardwert: false
Wrapper Typ: Boolean
DVG1 - Datenformate
6
char
Ein Zeichen des Unicodes
 mögliche Werte: 0000 ... FFFF. Konstanten, die mit „\u“ werden als
Unicode-Zeichen in Hexadezimaldarstellung interpretiert.
z.B.:
´0´ = 48 = \u0030
´A´ = 65 = \u0041
´a´ = 97 = \u0061
 enthält alle Zeichen aller Sprachen, z.B. griechisch, kyrillisch,
arabisch, chinesisch (?) ....
 Programmtexte können alle Unicode-Zeichen benutzen. Es kann z.B.
eine Variable µ definiert werden.
 Standardwert: \u0000
 Wrapper Typ: Char

DVG1 - Datenformate
7
byte, short, int, long
Verschieden lange ganze Zahlen
 Länge: byte 8 bit; short 16 bit; int 32 bit; long 64 bit
 mögliche Werte: alle ganzen Zahlen zwischen
-2l-1 und 2l-1-1, l = Länge des Typs
 interne Darstellung: im „zweier-Komplement“, d.h.
0x00 ... 0x7F entspricht den positiven Zahlen
0x80 ... 0xFF entspricht den negativen Zahlen, wert = wert - 256
0
...
127
-128
-127
...
-1
0x00 ...
0x7F 0x80 0x81 ...
0xFF
 long-Konstanten enden mit „L“, z.B. 321L
 Standardwert: 0
 Wrapper Typ: Byte, Short, Integer, Long

DVG1 - Datenformate
8
float, double
Gleitkommazahlen, werden im IEEE 754 Format gespeichert
 Länge: float 32 bit; double 64 bit
 1.4 10-45 < |float| < 3.4 10+38
 4.9 10-324 < |double| < 1.7 10+308
 zusätzlich +0, -0, +unendlich, -unendlich, keineZahl (NaN)
 alle Operationen sind zulässig und liefern definierte Resultate
z.B:
1/+0 = +unendlich
1/-0 = -unendlich
+0/+0 = NaN
 float-Konstanten enden mit „f“, z.B. -1.234e23f
 double-Konstanten enden mit „d“, z.B. 1.234567e-243d
 Standardwert: 0.0f , 0.0d
 Wrapper Typ: Float, Double

DVG1 - Datenformate
9
void


void ist der Rückgabewert von Funktionen, die keinen Wert
zurückgeben.
Wrapper Typ: Void
DVG1 - Datenformate
10
Zusammenfassung
Typ
boolean
char
byte
short
int
long
float
double
void
Größe
1 bit
16 bit
8 bit
16 bit
32 bit
64 bit
32 bit
64 bit
-
Minimum
Unicode 0
-128
15
-2
31
-2
63
-2
IEEE 754
IEEE 754
-
Maximum
16
Unicode 2 -1
127
15
2 -1
31
2 -1
63
2 -1
IEEE 754
IEEE 754
-
DVG1 - Datenformate
Wrapper Typ
Boolean
Char
Byte
Short
Integer
Long
Float
Double
Void
11
Gemeinsame Eigenschaften der primitiven Datentypen:
 belegen einen feste Speichermenge,
1bit (boolean)
1 Byte (byte)
2 Byte (char, short)
4 Byte (int, float)
8 Byte (long, double)
 Variable von primitiven Typen werden direkt im Speicher angelegt
z.B. bewirkt die Anweisung
double x = 1.0d;
die Reservierung von 8Byte Speicher und
die Initialisierung mit dem Wert 1.0d
DVG1 - Datenformate
12
Bezeichner



bestehen aus
– Buchstaben (a-z, A-Z, Unicode)
– Ziffern (0-9)
– Sonderzeichen (´_´ und ´$´)
beginnen nie mit einer Ziffer
z.B.:
– zulässig sind
• abcd123
• xy$05
• märz_23
– nicht zulässig sind
• 123xy
• märz-23
DVG1 - Datenformate
13
Gültigkeit von Bezeichnern



Variable bekommen in der Anweisung Speicherplatz zugewiesen, in
der sie vereinbart werden.
Der Platz den Variable belegen wird am Ende des Blockes
freigegeben, in dem sie vereinbart wurden.
Z.B.:
float f (float x)
{
int i=3;
i=i+1;
float x0 = 0;
x=x+x0;
return Math.abs(x);
}
i ist in dem ganzen Block bekannt, x0 nur in der zweiten Hälfte
DVG1 - Datenformate
14
float f (float x)
{
int i=0;
while (i<10)
{
float y=i*3.14159f;
System.out.println(i+“*pi=“+y);
i=i+1;
}
}
i ist im ganzen Block bekannt
y ist nur in dem inneren Block bekannt
DVG1 - Datenformate
15
Literale



Festkommaliteral
– enthält nur Ziffern und < 231 ==> int z.B. 12345
– enthält nur Ziffern und >=231 oder endet mit l oder L ==> long z.B.
12345L
– beginnt mit 0x oder 0X ==> hexadezimale Darstellung
– beginnt mit 0 ==> oktale Darstellung
Gleitkommaliteral
– enthält Ziffern, einen ´.´ oder ein ´e´ oder ´E´ ==> float
z.B.: 3.14159, 3.3333e-1, 2345E22
– wenn ein ´d´ oder ´D´ angehängt wird ==> double
z.B.: 3.14159d, 3.3333e-1D, 2345E22d
logisches Literal
– true und false
DVG1 - Datenformate
16

Alphanumerische Literale
– ein Zeichen in Hochkomma eingeschlossen
– Unicodezeichen mit
• \ddd (octal), führende Nullen können entfallen
• \udddd (hexadzimal)
z.B: ´A´ = ´\101´ = ´\u0041´ ; ´ ´ = ´\40´ = ´\u0020´
– besondere Zeichen
Zeilenschaltung
Tabulaturzeichen
Rückschritt
Wagenrücklauf
Seitenvorschub
Apostroph/Hochkomma
Anführungszeichen
Umgekehrter Schrägstrich
\n (\u000A)
\t (\u0009)
\b (\u0008)
\r (\u000D)
\f (\u000C)
\´ (\u0027)
\“ (\u0022)
\\ (\u005C)
DVG1 - Datenformate
17

Zeichenkettenliteral
– Beliebige Folge von Zeichen, die in Anführungszeichen
eingeschlossen sind.
Z.B.:
“Hello, world!“
“\u0048\u0065\u006C\u006c\u006f\u002c\u0020\u0057\u006f\u0072
\u006C\u0064\u0021“
“\110\145\154\154\157\54\40\127\157\162\154\144\41“
DVG1 - Datenformate
18
Typumwandlungen



Implizit immer in „größere“ Typen, d.h
– byte ==> int
– char ==> int
– short ==> int
– int ==> long
– float ==> double
– byte, char, short, int, long ==> float, double
byte und short werden vor der Verarbeitung immer nach int
konvertiert
Explizite Umwandlung durch „casting“ : (typ)ausdruck
– z.B.:
short s;
byte b = (byte)s;
– Umwandlung kann mit Informationsverlusten verbunden sein !
DVG1 - Datenformate
19
Operationen mit Festkommazahlen

Unäre Operatoren
– Negation „-“
– Bit-Komplement „~“
• bitweises ersetzen der 0 durch 1 und umgekehrt
– Inkrement „++“
• j = ++i <==> i=i+1; j=i; (Präinkrement)
• j = i++ <==> j=i; i=i+1; (Postinkrement)
– Dekrement „--“
• j = --i <==> i=i-1; j=i; (Prädekrement)
• j = i-- <==> j=i; i=i-1; (Postdekrement)
DVG1 - Datenformate
20
i
-i
~i
++i
--i
1
-1
-2
2
0
0
0
-1
1
-1
-1
1
0
0
-2
255
-255
-256
256
254
-255
255
254
-254
-256
2147483647 -2147483647 -2147483648 -2147483648 2147483646
-2147483648 -2147483648 2147483647 -2147483647 2147483647
DVG1 - Datenformate
21

Binäre Operatoren
– Addition „+“
– Subtraktion „-“
– Multiplikation „*“
– Division „/“ mit Rundung zur Null
– Modulo „%“
• a%b = a - (a/b)*b
– bitweise Verschiebung nach links „<<“
• a << b, die Binärdarstellung von a wird um (b%L) Stellen nach
links verschoben, rechts wird mit „0“ aufgefüllt. L ist die Länge
von a (byte 8, char und short 16, int 32, long 64)
– bitweise Verschiebung nach rechts unter Berücksichtigung des
Vorzeichens „>>“
• a >> b, die Binärdarstellung von a wird um (b%L) Stellen nach
rechts verschoben, dabei wird von links mit dem ersten bit
aufgefüllt
DVG1 - Datenformate
22
– bitweise Verschiebung nach rechts ohne Berücksichtigung des
Vorzeichens „>>>“
• a >>> b, die Binärdarstellung von a wird um (b%L) Stellen
nach rechts verschoben, dabei wird von links mit „0“ aufgefüllt
– logische Operatoren
• bitweises logisches „und“ : „&“
• bitweises logisches „oder“ : „|“
• bitweises logisches „exklusives oder“ : „^“
– Vergleichoperatoren „>“, „<“, „>=“, „<=“, „==“, „!=“
• ergeben immer boolsche Werte
DVG1 - Datenformate
23
i
1
0
-1
255
-255
256
-256
1
0
-1
255
-255
256
-256
j
2
2
2
2
2
2
2
4
4
4
4
4
4
4
i+j
3
2
1
257
-253
258
-254
5
4
3
259
-251
260
-252
i<<j i>>j
i>>>j i&j
i|j
i^j
4
0
0 0
3
3
0
0
0 0
2
2
-4
-1 1073741823 2
-1
-3
1020 63
63 2 255 253
-1020 -64 1073741760 0 -253 -253
1024 64
64 0 258 258
-1024 -64 1073741760 0 -254 -254
16
0
0 0
5
5
0
0
0 0
4
4
-16
-1 268435455 4
-1
-5
4080 15
15 4 255 251
-4080 -16 268435440 0 -251 -251
4096 16
16 0 260 260
-4096 -16 268435440 0 -252 -252
DVG1 - Datenformate
24


Ternärer Operator „?:“
– boolausdr ? ausdruck1 : ausdruck2 ;
• boolausdr == true ==> ausdruck1
• boolausdr == false ==> ausdruck2
Zuweisungsoperatoren
– Zuweisung „=“
– kombinierte Zuweisung „op=“ , wobei op ein beliebiger binärer
Operator ist. i op= j ist äquivalent zu i = i op j. z.B.:
• i += 1 <==> i = i+1 <==> i++
• i <<= 4 <==> i = i << 4
– Zuweisungsoperatoren besitzen den Wert, der zugewiesen wird.
Daher können sie in Ausdrücken wiederverwendet werden. Z.B.:
• i = 1 + (j=3*5) *7; ==> j=15; i=106;
• i = (j = 999); ==> j=999; i=999;
DVG1 - Datenformate
25
Operationen mit Gleitkommazahlen

Folgende Operatoren arbeiten bei Gleitkommazahlen analog zu
Festkommazahlen:
– Unäre Operatoren : „-“, „++“, „--“
– Binäre Operatoren : „+“, „-“, „*“, „/“, „%“, „>“, „<“, „>=“, „<=“, „==“, „!=“
– ternärer Operator : „?:“
– Zuweisungsoperatoren : „=“, „op=“
DVG1 - Datenformate
26
Operationen mit Zeichenketten

Verkettung „+“
– string1 + string2 ergibt die Zeichenkette, die aus Aneinanderhängen
der Zeichenketten string1 und string2 entsteht. Z.B.:
• “Hallo, “ + “World!“ ergibt “Hallo, World!“
DVG1 - Datenformate
27
Operationen mit boolschen Werten


Operatoren mit unverkürzter Auswertung
– und „&“, oder „|“, exklusives oder „^“
– Die Ausdrücke werden ausgewertet auch wenn das Ergebnis
schon sicher ist. Z.B
• b=(i > j) | f(j) ; Wenn i>j ist, müßte f(j) nicht aufgerufen werden
um b zu bestimmen. Wird aber doch aufgerufen.
Operatoren mit verkürzter Auswertung
– und „&&“, oder „||“
– Die Ausdrücke werden nur soweit ausgewertet, bis das Ergebnis
des Ausdruckes bekannt ist.
DVG1 - Datenformate
28
Reihenfolge von Operatoren
• Die Operationen werden der Priorität
nach abgearbeitet.
• Bei gleicher Priorität werden die
Operatoren von links nach rechts
abgearbeitet.
• Zuweisungsoperatoren werden von
rechts nach links abgearbeitet.
DVG1 - Datenformate
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
. [] ()
- ++ -- ! ~ instanceof
*/%
+<< >> >>>
< > <= >=
== !=
&
^
|
&&
||
?:
= op=
,
29
Herunterladen