Datenformate

Werbung
Datenformate
DVG1 - 05 - 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 - 05 - 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 = 210 bit = 1024 bit
~ 10 3 bit
1 Mbit = 220 bit = 1024 kbit =
1048576 bit ~ 10 6 bit
1 Gbit = 230 bit = 1024 Mbit =
1073741824 bit ~ 10 9 bit
1 Tbit = 240 bit = 1024 Gbit =
1099511627776 bit ~ 1012 bit
1 Pbit = 250 bit = 1024 Tbit = 1125899906842624 bit ~ 10 15 bit
.......
DVG1 - 05 - 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 zusammengefasst
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 - 05 - 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 bit 0“.
Zu jedem primitiven Datentyp gibt es einen „Wrapper Typ“ (Umschlag
Typ). Mit dieser kann man Objekte von dem Typ mit new erzeugen.
DVG1 - 05 - Datenformate
5
boolean
Logischer Wahrheitswert
Ergebnis logischer Ausdrücke
mögliche Werte: false, true
Standardwert: false
Wrapper Typ: Boolean
boolean schalter = true;
schalter = false;
if (schalter) { .... }
else { .... }
schalter = !schalter;
schalter = (n > 5) & (i < 3);
DVG1 - 05 - Datenformate
6
char
Ein Zeichen des Unicodes
mögliche Werte: 0x0000 ... 0xFFFF. Konstanten, der Form
'\uxxxx' werden als Unicode-Zeichen in Hexadezimaldarstellung
interpretiert.
z.B.:
'0' = 48 = '\u0030' = 0x0030
'A' = 65 = '\u0041' = 0x0041
'a' = 97 = '\u0061' = 0x0061
enthält die Zeichen vieler 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
char und boolean sind die einzigen vorzeichenfreien Datentypen.
DVG1 - 05 - 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 (8, 16, 32, 64)
interne Darstellung: im „zweier-Komplement“, d.h.
0x00 ... 0x7F entspricht den positiven Zahlen
0x80 ... 0xFF entspricht den negativen Zahlen, wert = wert - 256
0x00 ...
0x7F 0x80 0x81 ...
0xFF
0
...
127
128
129
...
255
0
...
127
-128 -127 ...
-1
long-Konstanten enden mit „L“, z.B. 321L
Alle anderen ganzzahligen Konstanten sind immer int.
Standardwert: 0
Wrapper Typen: Byte, Short, Integer, Long
DVG1 - 05 - 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 - 05 - Datenformate
9
void
void ist der Rückgabewert von Funktionen,
die keinen Wert zurückgeben.
Wrapper Typ: Void
DVG1 - 05 - 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 - 05 - 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 - 05 - 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 - 05 - 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 - 05 - 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 - 05 - 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´, endet nicht mit ´f´ oder
´F´ ==> double
z.B.: 3.14159, 3.3333e-1, 2345E22

wenn ein ´f´ oder ´F´ angehängt wird ==> float
z.B.: 3.14159f, 3.3333e-1F, 2345E22f
logisches Literal

true und false
DVG1 - 05 - Datenformate
16
Alphanumerische Literale
 ein Zeichen in Hochkomma eingeschlossen
 Unicodezeichen mit
\ddd (octal), führende Nullen können entfallen
\udddd (hexadezimal)
z.B: ´A´ = ´\101´ = ´\u0041´ ; ´ ´ = ´\40´ = ´\u0020´
 besondere Zeichen
Zeilenschaltung
Tabulaturzeichen
Rückschritt
Wagenrücklauf
Seitenvorschub
Apostroph/Hochkomma
Anführungszeichen
Umgekehrter Schrägstrich
\n
\t
\b
\r
\f
\'
\"
\\
(\u000A)
(\u0009)
(\u0008)
(\u000D)
(\u000C)
(\u0027)
(\u0022)
(\u005C)
DVG1 - 05 - 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\1
62\154\144\41"

DVG1 - 05 - 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 - 05 - 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 - 05 - Datenformate
20
int i;
i
1
0
-1
255
-255
2147483647
-2147483648
-i
-1
0
1
-255
255
-2147483647
-2147483648
~i
-2
-1
0
-256
254
-2147483648
2147483647
DVG1 - 05 - Datenformate
++i
2
1
0
256
-254
-2147483648
-2147483647
--i
0
-1
-2
254
-256
2147483646
2147483647
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 - 05 - 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 - 05 - 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
4
0
-4
1020
-1020
1024
-1024
16
0
-16
4080
-4080
4096
-4096
i>>j
0
0
-1
63
-64
64
-64
0
0
-1
15
-16
16
-16
i>>>j
0
0
1073741823
63
1073741760
64
1073741760
0
0
268435455
15
268435440
16
268435440
DVG1 - 05 - Datenformate
i&j
0
0
2
2
0
0
0
0
0
4
4
0
0
0
i|j
3
2
-1
255
-253
258
-254
5
4
-1
255
-251
260
-252
i^j
3
2
-3
253
-253
258
-254
5
4
-5
251
-251
260
-252
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 - 05 - 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 - 05 - 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 - 05 - Datenformate
27
Operationen mit boolschen Werten
Negation "!"
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üsste 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 - 05 - 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 - 05 - Datenformate
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
. [] ()
- ++ -- ! ~ instanceof
*/%
+<< >> >>>
< > <= >=
== !=
&
^
|
&&
||
?:
= op=
,
29
Zugehörige Unterlagen
Herunterladen