Einstieg in die Informatik mit Java Weitere Ausdrucke ¨ Gerd Bohlender Institut fur ¨ Angewandte und Numerische Mathematik

1 / 29

Gliederung ¨ 1 Uberblick 2 Kombinierte Zuweisungsoperatoren 3 Vergleichsoperatoren 4 Logische Operatoren 5 Weitere Operatoren 6 Klassifizierung von Operatoren

¨ der Operatoren 7 Prioritat 8 Typumwandlungen

2 / 29

Gliederung ¨ 1 Uberblick 2 Kombinierte Zuweisungsoperatoren 3 Vergleichsoperatoren 4 Logische Operatoren 5 Weitere Operatoren 6 Klassifizierung von Operatoren

¨ der Operatoren 7 Prioritat 8 Typumwandlungen

3 / 29

¨ Uberblick

In diesem Kapitel werden weitere Ausdrucke eines ¨ Java-Programms beschrieben.

Weitere Ausdrucke ¨ Kombinierte Operatoren, Vergleiche, logische Operatoren, ...

Klassifizierung ¨ Assoziativitat, ¨ ... Prioritat,

4 / 29

Gliederung ¨ 1 Uberblick 2 Kombinierte Zuweisungsoperatoren 3 Vergleichsoperatoren 4 Logische Operatoren 5 Weitere Operatoren 6 Klassifizierung von Operatoren

¨ der Operatoren 7 Prioritat 8 Typumwandlungen

5 / 29

Kombinierte Zuweisungsoperatoren Kombinierte Zuweisungsoperatoren verkurzen die ¨ Schreibweise von Zuweisungen der Art: a = a ◦ b; Steht also links wie rechts vom Zuweisungsoperator = dieselbe Variable, kann der Ausdruck auch verkurzt geschrieben werden ¨ als: a ◦= b; ¨ Der Zuweisungsoperator lasst sich mit den folgenden Operatoren kombinieren: += &= =

*= ^= >>>=

/= %=

6 / 29

Kombinierte Zuweisungsoperatoren, Beispiele

Beispiel g=1; h=1; g = g + 5; // ergibt g = 6 h += 5; // ergibt h = 6

Achtung Die Wirkung auf g und h ist die gleiche, die Anzahl der Auswertungen von g und h sind dagegen nicht gleich. g wird hier zweimal ausgewertet, h hingegen nur einmal (wichtig bei sogenannten Nebeneffekten, z,B. bei Feldern)!

7 / 29

Gliederung ¨ 1 Uberblick 2 Kombinierte Zuweisungsoperatoren 3 Vergleichsoperatoren 4 Logische Operatoren 5 Weitere Operatoren 6 Klassifizierung von Operatoren

¨ der Operatoren 7 Prioritat 8 Typumwandlungen

8 / 29

Vergleichsoperatoren Vergleichsoperatoren liefern boolsche Werte als Ergebnistyp zuruck, also true oder false. ¨ Operator == != = < >

Bedeutung gleich ungleich kleiner gleich ¨ großer gleich kleiner ¨ großer

Beispiel x == y x != y w e r t >= 0 z%2 == 0

// // // //

Test Test Test Test

ob ob ob ob

x und y g l e i c h s i n d x und y u n g l e i c h s i n d wert n i c h t n e g a t i v i s t z gerade i s t 9 / 29

Gliederung ¨ 1 Uberblick 2 Kombinierte Zuweisungsoperatoren 3 Vergleichsoperatoren 4 Logische Operatoren 5 Weitere Operatoren 6 Klassifizierung von Operatoren

¨ der Operatoren 7 Prioritat 8 Typumwandlungen

10 / 29

Logische Operatoren Logische Operatoren dienen zur Zusammensetzung mehrerer logischer Werte, z.B. mehrerer Vergleiche. Operator & && | ! ^

||

Bedeutung Logisches Und Wahr, falls beide Operanden wahr sind. Logisches Oder Wahr, falls mindestens einer der Operanden wahr ist. Logische Negation Wahr, falls der Operand falsch ist. Exklusives Oder Wahr, falls die Operanden verschieden sind.

11 / 29

Logische Operatoren, Beispiele Beim logischen Und wird gepruft, ¨ ob beide Operanden den Wert true haben. Nur dann ist das Ergebnis true, andernfalls false.

Beispiel x >= 0 && x 0 && x%2 == 0 / / p o s i t i v e gerade Zahl ? c >= ’ a ’ && c 9 / / k e i n e dezimale Z i f f e r ? x==2 | | x==3 | | x==5 | | x==7 / / e i n s t . P r i m z a h l ? c == ’ a ’ | | c == ’A ’ / / k l e i n e s oder großes a? 12 / 29

Logische Operatoren, Beispiele Bei der logischen Negation wird der Wahrheitswert des Operanden negiert. Hat der Operand den Wert true, dann ist das Ergebnis false und umgekehrt.

Beispiel ! ( x >= 0 ) / / e n t s p r i c h t x < 0 / / ( ausser b e i NaN) ! fertig / / i s t f e r t i g == f a l s e ? Vorsicht bei der logischen Negation von kombinierten Aussagen! Es gelten die De Morganschen Regeln:

Beispiel ! ( a && b ) / / entspricht !a | | !b ! (a | | b) / / e n t s p r i c h t ! a && ! b / / Beispiel : ! ( x>=0 && x=0) | | ! ( x b a >>> b

Bedeutung Konditionaloperator: Verkurzte Form fur ¨ ¨ if ... else ... Ist a wahr, so ist das Ergebnis b, sonst c. Bitoperatoren: Bitweises Und, Oder, exklusives Oder, bitweise Negation Schiebeoperator: a wird um b Bits nach links verschoben. Schiebeoperator: a wird um b Bits nach rechts verschoben, dabei wird links mit einem Vorzeichenbit aufgefullt. ¨ Schiebeoperator: a wird um b Bits nach rechts verschoben, dabei wird mit Nullen aufgefullt. ¨

Achtung Grund fur ¨ die Existenz des Operators >>> ist, daß es in Java keine unsigned–Typen gibt! Der linke Operand wird als vorzeichenlose Zahl interpretiert. 16 / 29

Gliederung ¨ 1 Uberblick 2 Kombinierte Zuweisungsoperatoren 3 Vergleichsoperatoren 4 Logische Operatoren 5 Weitere Operatoren 6 Klassifizierung von Operatoren

¨ der Operatoren 7 Prioritat 8 Typumwandlungen

17 / 29

Klassifizierung von Operatoren

Operatoren werden anhand der folgenden Kriterien klassifiziert: ¨ binar, ¨ ternar), ¨ (1) Anzahl der Operanden (unar, ¨ der Operatoren, (2) Prioritat ¨ Auswertung erfolgt in Normalfall von links (3) Assoziativitat: ¨ nach rechts, bei unaren Operatoren und Zuweisungen von rechts nach links, ¨ (4) Prafix– oder Postfixvariante (nur fur ¨ ++ und −− relevant).

18 / 29

Reihenfolge der Auswertung der Operanden Achtung Operanden werden im Gegensatz zu Operatoren immer von links nach rechts ausgewertet! Dies ist wieder bei Nebeneffekten wichtig, z.B. bei Feldern.

Beispiel i n t k =2 , l =3 , m=4; k = l = m; / / k , l ,m haben a l l e den Wert 4 .

Der obige Ausdruck wird wie folgt ausgewertet: (1) k wird ausgewertet, eventuell Nebeneffekte, (2) l wird ausgewertet, eventuell Nebeneffekte, (3) m wird ausgewertet, eventuell Nebeneffekte, (4) rechte Zuweisung, (5) linke Zuweisung. 19 / 29

Reihenfolge der Auswertung der Operanden

Achtung Reihenfolge der Auswertungen ist bei Nebeneffekten bedeutsam!

Beispiel, Vorgriff auf Felder i n t [ ] f e l d = { 0 , 1 1 , 2 2 , 3 3 } ; / / Feld m i t 4 Werten i n t i =0; / / Index f e l d [++ i ] = f e l d [++ i ] = f e l d [++ i ] ; / / dies bewirkt : / / feld [1] = feld [2] = feld [3]; / / danach s t e h t i n f e l d : {0 ,33 ,33 ,33}

20 / 29

Gliederung ¨ 1 Uberblick 2 Kombinierte Zuweisungsoperatoren 3 Vergleichsoperatoren 4 Logische Operatoren 5 Weitere Operatoren 6 Klassifizierung von Operatoren

¨ der Operatoren 7 Prioritat 8 Typumwandlungen

21 / 29

¨ der Operatoren Prioritat ¨ Prioritat 15

Operator ., [], ()

Assoz. L

14

R

8 7 6 5 4

++, --, +, -, !, ~ new (Typ) *, /, % +, , >>> ,= instanceof ==, != & ^ | &&

3

||

L

2 1

?: =, +=, *=, usw.

R R

13 12 11 10 9

R L L L L L L L L L

Bedeutung Komponentenzugriff bei Klassen, Feldern und Methodenaufruf ¨ Operatoren Unare Instanzbildung Explizite Typkonvertierung Multiplikative Operatoren Additive Operatoren Schiebeoperatoren Vergleichsoperatoren Vergleichsoperatoren Und–Operator (bitweise, logisch) Exklusives Oder (bitweise, logisch) Oder–Operator (bitweise, logisch) (Logisches Und)–Operator (Kurzschluß–Auswertung) (Logisches Oder)–Operator (Kurzschluß–Auswertung) Konditionaloperator Zuweisungsoperatoren 22 / 29

Reihenfolge der Auswertung

• Die hochste ¨ ¨ wird mit der Zahl 15 gekennzeichnet, Prioritat

die niederste mit der Zahl 1. • Operatoren mit gleicher Prioritat ¨ werden von links nach

rechts ( Assoz.“ = L = linksassoziativ) bzw. von rechts nach ” links ( Assoz.“ = R = rechtsassoziativ) ausgewertet. ” • Außerdem kann die Reihenfolge der Operationen immer durch Klammern () festgelegt werden.

23 / 29

Gliederung ¨ 1 Uberblick 2 Kombinierte Zuweisungsoperatoren 3 Vergleichsoperatoren 4 Logische Operatoren 5 Weitere Operatoren 6 Klassifizierung von Operatoren

¨ der Operatoren 7 Prioritat 8 Typumwandlungen

24 / 29

Typumwandlungen, implizit ¨ (a) Umwandlung in großere“ Typen geht automatisch. ” byte → short → int → long → float → double char → int

Achtung Bei der Konversion von int nach float und von long nach ¨ float bzw. double konnen Rundungsfehler auftreten (Verlust von Nachkommastellen)!

Beispiel i n t i = 123456789; float f = i ; / / e r g i b t 1.23456792E8 long l = 1234567890123456789L ; double d = l ; / / e r g i b t 1.23456789012345677E18 f = l; / / e r g i b t 1.23456794E18 25 / 29

Typumwandlungen, explizit ¨ (b) Umwandlungen in kleinere“ Typen konnen zu Fehlern ” fuhren und mussen deshalb explizit dem Kompiler ¨ ¨ mitgeteilt werden. Dies ist mit Hilfe des Cast–Operators ¨ moglich: double → float → long → int → short → byte int → char → byte short ↔ char

Syntax (Typname) Ausdruck ¨ des Typecast-Operators muss Wegen der hohen Prioritat meistens geklammert werden: (Typname)(Ausdruck) 26 / 29

Typumwandlungen, Beispiel

¨ Haufiger Anwendungsfall: Konversion einer Gleitkommazahl in eine ganze Zahl. Der gebrochene Anteil wird abgeschnitten.

Beispiel double d = 1 2 . 8 9 ; i n t i = ( i n t ) d ; / / e r g i b t 12 / / genauso f u e r n e g a t i v e Zahlen : d = −12.89; i = ( int ) d; / / e r g i b t −12

27 / 29

Typumwandlungen von/nach boolean

Achtung Es existieren keine Konversionen von oder nach boolean ¨ Allerdings ist folgendes moglich: Interpretation von 0 = false und 1 = true.

Beispiel boolean b , i n t i ; b = i != 0; / / wandelt 0 i n f a l s e , 1 i n t r u e i = b?1:0; / / wandelt f a l s e i n 0 , t r u e i n 1

28 / 29

Verwendete Datentypen Aus Effizienzgrunden wird nicht in den Datentypen byte, short ¨ und char gerechnet, sondern in int.

Beispiel byte a=1 , b =2; byte c = a+b ; / / byte c = ( byte ) byte d = ++b ; / / d = d+a ; // d += a ; // c += 500; //

F e h l e r ! Summe i s t i n t ( a + b ) ; / / m i t Typecast geht es okay , Ausnahme ++ und −− F e h l e r ! Summe i s t i n t okay , Ausnahme komb . Zuweisung okay , e r g i b t −9 (= 503−2∗256)

¨ Bei gemischten Ausdrucken wird im großeren“ Typ gerechnet (in ¨ ” oben genannter Reihenfolge).

Beispiel i n t i =1; double d =1; i = d+ i ; / / Fehler , Summe i s t double 29 / 29