Programmiertechnik Skalare Typen,Variablen

Prof. Dr. Oliver Haase
Karl Martin Kern
Achim Bitzer
Programmiertechnik
Skalare Typen,Variablen, Zuweisungen
int
inti;i;
long
longj;j;
boolean
booleanisEmpty;
isEmpty;
double
average;
double average;
char
charnaechstesZeichen;
naechstesZeichen;
j j==42L;
42L;
i i==(int)
(int)j;j;
isEmpty
isEmpty==true;
true;
average
=
37.266;
average = 37.266;
naechstesZeichen
naechstesZeichen=='h';
'h';
Java-Ganzzahltypen
Erinnerung
●
Ganze Zahlen heißen auf englisch und in Programmiersprachen Integers
●
Java definiert 4 verschiedene Integertypen, deren Länge und damit auch
Wertebereich fest definiert sind.
Typ
Länge kleinste darstellbare Zahl
größte darstellbare Zahl
byte
8 Bit
-128
127
short
16 Bit
-32‘768
32‘767
int
32 Bit
-2‘147‘483‘648
2‘147‘483‘647
long
64 Bit
-9‘223‘372‘036‘854‘775‘808
9‘223‘372‘036‘854‘775‘807
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
2/18
Java-Zeichentypen
●
Die englische Bezeichnung characters (chars)
ist auch im Deutschen geläufiger
●
Java verwendet 16-bit Unicode characters
●
Syntax in Java: char
●
Characters können auch als 2 Byte lange,
vorzeichenlose Ganzzahlen verwendet werden
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
3/18
Java-Booleans (1)
●
Booleans sind logische ("boolsche") Werte.
–
Sie können den Wahrheitswert wahr oder
falsch annehmen,
–
sie können logisch miteinander verknüpft
werden (A oder B, A und B, nicht A).
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
4/18
Java-Booleans (2)
●
●
Syntax in Java: boolean
– mögliche Werte: true oder false.
Im Speicher dargestellt als 4-Byte int, von dem nur 1 Bit
verwendet wird
– speicherineffizient: 32 Bit belegt, 1 Bit verwendet
– einfach, schnell, da Prozessoren auf wortgroße
Daten optimiert sind
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
5/18
Überblick: Skalare Typen in Java
Typ
Format, mögliche Werte
byte
8-Bit-Ganzzahl in 2-er Komplementdarstellung
short
16-Bit-Ganzzahl in 2-er Komplementdarstellung
int
32-Bit-Ganzzahl in 2-er Komplementdarstellung
long
64-Bit-Ganzzahl in 2-er Komplementdarstellung
float
32-Bit-Gleitkommazahl nach IEEE 754
double
64-Bit-Gleitkommazahl nach IEEE 754
char
16-Bit-Unicode-Zeichen
boolean
true, false
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
6/18
Variablen
●
●
Variablen sind benannte und typisierte
Speicherportionen, die Werte des angegebenen Typs
enthalten können.
Variablen müssen vor ihrer Benutzung deklariert
werden, etwa:
int
int i;i;
boolean
boolean isEmpty;
isEmpty;
Merke: Erst Typ, dann Name!
double
average;
double average;
short
short index1;
index1;
char
char naechstesZeichen;
naechstesZeichen;
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
7/18
Variablen - Java-Namenskonventionen
●
●
●
sprechende Namen: isEmpty statt b17
(lange Variablennamen erzeugen keinen langen Code!)
Variablennamen beginnen mit einem Kleinbuchstaben
zusammengesetzte Namen → Anfangsbuchstaben der
Folgewörter groß
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
8/18
Literale
●
●
Literale sind typisierte Konstanten, die etwa verwendet werden
können um Variablen zu initialisieren.
Verschiedene Typen erfordern Literale in verschiedenen Formaten:
Typ
Beispielliterale
byte
127, -128
short
32456
int
60273
long
13292367454L, 13292367454l
float
87.363F, 87.363f
double
37.266, 37.266D, 37.266d, 26.77e3
char
'A', 'h'
boolean
true, false
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
9/18
Zuweisungen
●
eine Zuweisung (Assignment) erlaubt, einer Variablen v
einen Wert w zuzuweisen
●
w muss denselben (oder einen engeren) Typ haben wie v.
●
Syntax (Schreibweise): v = w;
●
●
Vorsicht: Das Gleichheitszeichen "=" bedeutet nicht "Test auf
Gleichheit", sondern "mache linke Seite der rechter Seite
gleich". In Pseudocode wird Zuweisung häufig geschrieben
als: v ← w.
→ Warum kann die linke Seite einer Zuweisung nur eine
Variable und kein Literal sein?
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
10/18
Zuweisungen - Beispiele
int
int i;i;
int
int j;j;
boolean
boolean isEmpty;
isEmpty;
double
double average;
average;
char
char naechstesZeichen;
naechstesZeichen;
ii =
= 178;
178;
jj =
= i;i;
isEmpty
isEmpty =
= true;
true;
average
average =
= 37.266;
37.266;
naechstesZeichen
naechstesZeichen =
= 'h';
'h';
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
oder auch:
int
int ii =
= 178,
178, j;j;
boolean
boolean isEmpty
isEmpty =
= true;
true;
double
double average
average =
= 37.266;
37.266;
char
char naechstesZeichen
naechstesZeichen =
= 'h';
'h';
jj =
= i;i;
11/18
Automatische Typumwandlung
(auch: implizite Typwandlung/Typanpassung/Typkonversion)
●
●
●
englisch: automatic/implicit type conversion/cast
Werte engerer (niedriger) Typen können an Variablen
weiteren (höheren) Typs zugewiesen werden
– Java führt automatische Konversion durch
Beispiel:
Aber nicht:
int
int ii =
= 17;
17;
long
long j;j;
int
int i;i;
long
long jj =
= 42L;
42L;
jj =
= i;i;
ii =
= j;j;
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
12/18
Skalare Typhierarchie
Der Wertebereich eines engeren Typs ist eine Teilmenge
des Wertebereichs eines weiteren Typs. Für die
enger-Beziehung
"◄" gelten folgende Regeln:
1.Ganzzahltypen ◄ Gleitzahltypen
2.Ganzzahltypen: byte ◄ short ◄ int ◄ long
3.Gleitzahltypen: float ◄ double
4.char ◄ int
●
●
aus 1, 2 und 3 ergibt sich:
● byte ◄ short ◄ int ◄ long ◄ float ◄ double
aus 1, 2 und 4 ergibt sich:
● char ◄ int ◄ long ◄ float ◄ double
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
13/18
Skalare Typhierarchie
Merke:
●
●
Kein anderer Typ kann in boolean konvertiert
werden, oder umgekehrt
Die Wandlung von einer Ganzzahl in eine Gleitzahl
kann zu Präzisionsverlust führen!
–
int → float
–
long → float
–
long → double
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
14/18
Explizite Typumwandlung
●
●
●
Explizite Typwandlung ist in zwei Richtungen möglich:
–
aufwärts (englisch: upcast): enger Typ → weiter Typ
–
abwärts (englisch: downcast): weiter Typ → enger Typ
Abwärtskonvertierung führt zu Fehlern, wenn Wert nicht in
niedrigeren Typen passt!
Beispiel Aufwärtskonvertierung:
int
int ii =
= 17;
17;
long
long j;j;
jj =
= (long)
(long) i;i;
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
15/18
Explizite Typumwandlung
1. Beispiel Abwärtskonvertierung:
int
inti;i;
long
longj j=
=42L;
42L;
i i=
=(int)
(int)j;j;
2. Beispiel Abwärtskonvertierung:
int
inti;i;
long
longj j=
=2500000000L;
2500000000L;
i i=
=(int)
(int)j;j;
→ i enthält den Wert -1794967296! – Warum?
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
16/18
Strings
●
●
●
Strings, d.h. Zeichenketten, sind kein skalarer Typ, sondern
Objekte.
Strings sind so fundamental, dass es wichtig ist Grundlegendes
über ihre Verwendung zu wissen.
Eine String-Variable wird genauso deklariert wie eine Variable
skalaren Typs:
String
Stringtext;
text;
●
Einer String-Variablen kann ein Text zugewiesen werden:
text
text=
="Hallo,
"Hallo,Welt!";
Welt!";
●
Beides kann zusammengefasst werden zu:
String
Stringtext
text=
="Hallo,
"Hallo,Welt";
Welt";
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
17/18
Zu guter Letzt...
We all know that 666 is the number of the Beast, but did you know that...
670 - Approximate number of the Beast
DCLXVI - Roman numeral of the Beast
666.0000000 - Number of the High Precision Beast
665.9999954 - Number of the Pentium Beast
0.666 - Number of the Millibeast
1010011010 - Binary of the Beast
$665.95 - Retail price of the Beast
$699.25 - Price of the Beast plus 5% state sales tax
$769.95 - Price of the Beast with all accessories and replacement soul
$606.66 - Wal-Mart price of the Beast
Route 666 - Way of the Beast
666 F - Oven temperature for roast Beast
666 mg - Recommended Minimum Daily Requirement of Beast
Lotus 6-6-6 - Spreadsheet of the Beast
Word 6.66 - Word Processor of the Beast
i66686 - CPU of the Beast
666i - BMW of the Beast
668 - Next-door neighbor of the Beast
Prof. Dr. Oliver Haase, HTWG Konstanz
Karl Martin Kern, Seitenbau GmbH
Achim Bitzer, Seitenbau GmbH
18/18