Post on 05-Apr-2015
DVG1 - Datenformate 1
Datenformate
DVG1 - Datenformate 2
SpeicherhierarchieProzessor, 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 3
Kleinste Speichereinheit: 1bitja - 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 4
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 5
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 6
boolean Logischer Wahrheitswert Ergebnis logischer Operationen mögliche Werte: false, true Standardwert: false Wrapper Typ: Boolean
DVG1 - Datenformate 7
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 8
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 9
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 Resultatez.B:1/+0 = +unendlich1/-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 10
void void ist der Rückgabewert von Funktionen, die keinen Wert
zurückgeben. Wrapper Typ: Void
DVG1 - Datenformate 11
Zusammenfassung
Typ Größe Minimum Maximum Wrapper Typboolean 1 bit - Booleanchar 16 bit Unicode 0 Unicode 216-1 Charbyte 8 bit -128 127 Byteshort 16 bit -215 215-1 Shortint 32 bit -231 231-1 Integerlong 64 bit -263 263-1 Longfloat 32 bit IEEE 754 IEEE 754 Floatdouble 64 bit IEEE 754 IEEE 754 Doublevoid - - - Void
DVG1 - Datenformate 12
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 13
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 14
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 15
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 16
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 17
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 \n (\u000A)Tabulaturzeichen \t (\u0009)Rückschritt \b (\u0008)Wagenrücklauf \r (\u000D)Seitenvorschub \f (\u000C)Apostroph/Hochkomma \´ (\u0027)Anführungszeichen \“ (\u0022)Umgekehrter Schrägstrich \\ (\u005C)
DVG1 - Datenformate 18
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 19
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 20
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 21
i -i ~i ++i --i1 -1 -2 2 00 0 -1 1 -1
-1 1 0 0 -2255 -255 -256 256 254
-255 255 254 -254 -2562147483647 -2147483647 -2147483648 -2147483648 2147483646
-2147483648 -2147483648 2147483647 -2147483647 2147483647
DVG1 - Datenformate 22
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 23
– 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 24
i j i+j i<<j i>>j i>>>j i&j i|j i^j1 2 3 4 0 0 0 3 30 2 2 0 0 0 0 2 2
-1 2 1 -4 -1 1073741823 2 -1 -3255 2 257 1020 63 63 2 255 253
-255 2 -253 -1020 -64 1073741760 0 -253 -253256 2 258 1024 64 64 0 258 258
-256 2 -254 -1024 -64 1073741760 0 -254 -2541 4 5 16 0 0 0 5 50 4 4 0 0 0 0 4 4
-1 4 3 -16 -1 268435455 4 -1 -5255 4 259 4080 15 15 4 255 251
-255 4 -251 -4080 -16 268435440 0 -251 -251256 4 260 4096 16 16 0 260 260
-256 4 -252 -4096 -16 268435440 0 -252 -252
DVG1 - Datenformate 25
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 26
Operationen mit Gleitkommazahlen Folgende Operatoren arbeiten bei Gleitkommazahlen analog zu
Festkommazahlen:– Unäre Operatoren : „-“, „++“, „--“– Binäre Operatoren : „+“, „-“, „*“, „/“, „%“, „>“, „<“, „>=“, „<=“, „==“, „!=“– ternärer Operator : „?:“– Zuweisungsoperatoren : „=“, „op=“
DVG1 - Datenformate 27
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 28
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 29
Reihenfolge von Operatoren15 . [] ()
14 - ++ -- ! ~ instanceof
13 * / %
12 + -
11 << >> >>>
10 < > <= >=
9 == !=
8 &
7 ^
6 |
5 &&
4 ||
3 ?:
2 = op=
1 ,
• 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.