From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../hjp5/html/k100038.html | 540 +++++++++++++++++++++ 1 file changed, 540 insertions(+) create mode 100644 Master/Reference Architectures and Patterns/hjp5/html/k100038.html (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100038.html') diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100038.html b/Master/Reference Architectures and Patterns/hjp5/html/k100038.html new file mode 100644 index 0000000..6345f2c --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100038.html @@ -0,0 +1,540 @@ + + + +Handbuch der Java-Programmierung, 5. Auflage + + + + + + + + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage +
 <<  +  <   +  >   + >>  + API  +Kapitel 5 - Ausdrücke +
+
+ + + + +

5.8 Operator-Vorrangregeln

+
+ +
+ +

+Tabelle 5.6 listet +alle Operatoren in der Reihenfolge ihrer Vorrangregeln auf. Weiter +oben stehende Operatoren haben dabei Vorrang vor weiter unten stehenden +Operatoren. Innerhalb derselben Gruppe stehende Operatoren werden +entsprechend ihrer Assoziativität ausgewertet. + +

+Die Spalte Typisierung gibt die möglichen Operandentypen +an. Dabei steht »N« für numerische, »I« für +integrale (also ganzzahlig numerische), »L« für logische, +»S« für String-, »R« für Referenz- und +»P« für primitive Typen. Ein »A« wird verwendet, +wenn alle Typen in Frage kommen, und mit einem »V« wird +angezeigt, dass eine Variable erforderlich ist. + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GruppeOperatorTypisierungAssoziativitätBezeichnung
1++NRInkrement
+
+
--NRDekrement
+
+
+NRUnäres Plus
+
+
-NRUnäres Minus
+
+
~IREinerkomplement
+
+
!LRLogisches NICHT
+
+
(type)ARType-Cast
2*N,NLMultiplikation
+
+
/N,NLDivision
+
+
%N,NLModulo
3+N,NLAddition
+
+
-N,NLSubtraktion
+
+
+S,ALString-Verkettung
4<<I,ILLinksschieben
+
+
>>I,ILRechtsschieben
+
+
>>>I,ILRechtsschieben mit Nullexpansion
5<N,NLKleiner
+
+
<=N,NLKleiner gleich
+
+
>N,NLGrößer
+
+
>=N,NLGrößer gleich
+
+
instanceofR,RLKlassenzugehörigkeit
6==P,PLGleich
+
+
!=P,PLUngleich
+
+
==R,RLReferenzgleichheit
+
+
!=R,RLReferenzungleichheit
7&I,ILBitweises UND
+
+
&L,LLLogisches UND mit vollständiger Auswertung +
8^I,ILBitweises Exklusiv-ODER
+
+
^L,LLLogisches Exklusiv-ODER
9|I,ILBitweises ODER
+
+
|L,LLLogisches ODER mit vollständiger Auswertung +
10&&L,LLLogisches UND mit Short-Circuit-Evaluation +
11||L,LLLogisches ODER mit Short-Circuit-Evaluation +
12?:L,A,ARBedingte Auswertung
13=V,ARZuweisung
+
+
+=V,NRAdditionszuweisung
+
+
-=V,NRSubtraktionszuweisung
+
+
*=V,NRMultiplikationszuweisung
+
+
/=V,NRDivisionszuweisung
+
+
%=V,NRRestwertzuweisung
+
+
&=N,N u. L,LRBitweises-UND-Zuweisung und Logisches-UND-Zuweisung +
+
+
|=N,N u. L,LRBitweises-ODER-Zuweisung und Logisches-ODER-Zuweisung +
+
+
^=N,N u. L,LRBitweises-Exklusiv-ODER-Zuweisung und Logisches-Exklusiv-ODER-Zuweisung +
+
+
<<=V,IRLinksschiebezuweisung
+
+
>>=V,IRRechtsschiebezuweisung
+
+
>>>=V,IRRechtsschiebezuweisung mit Nullexpansion +
+

+Tabelle 5.6: Operator-Vorrangregeln

+

+ + + + + + + + + + + +
+ +

+Etwas unschön ist die Tatsache, dass die bitweisen Operatoren +schwächer binden als die relationalen Operatoren. Da sie auf +einer Stufe mit den zugehörigen logischen Operatoren stehen, +gibt es beim Übersetzen des folgenden Programms den Fehler »Incompatible +type for &. Can't convert int to boolean«:

+ + + + +
 Warnung 
+
+ + +

+ + + + +
+ +
+001 /* Listing0508.java */
+002 
+003 public class Listing0508
+004 {
+005   public static void main(String[] args)
+006   {
+007     int i = 55;
+008     int j = 97;
+009     if (i & 15 < j & 15) {
+010       System.out.println("LowByte(55) < LowByte(97)");
+011     } else {
+012       System.out.println("LowByte(55) >= LowByte(97)");
+013     }
+014   }
+015 }
+
+
+ +Listing 5.8: Bindungsprobleme bei den bitweisen Operatoren

+ +

+Bei der Verwendung der bitweisen Operatoren sind also zusätzliche +Klammern erforderlich. Die korrekte Version des Programms zeigt Listing 5.9 +(verbessert wurde Zeile 009): + + +

+ + + + + +
+ +
+001 /* Listing0509.java */
+002 
+003 public class Listing0509
+004 {
+005   public static void main(String[] args)
+006   {
+007     int i = 55;
+008     int j = 97;
+009     if ((i & 15) < (j & 15)) { 
+010       System.out.println("LowByte(55) < LowByte(97)");
+011     } else {
+012       System.out.println("LowByte(55) >= LowByte(97)");
+013     }
+014   }
+015 }
+
+
+Listing0509.java
+ +Listing 5.9: Korrekte Klammerung von bitweisen Operatoren

+ +

+Die Ausgabe des Programms ist nun erwartungsgemäß: + +

+LowByte(55) >= LowByte(97)
+
+ +
+ + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage, Addison +Wesley, Version 5.0.1 +
 <<  +  <   +  >   + >>  + API  +© 1998, 2007 Guido Krüger & Thomas +Stark, http://www.javabuch.de +
+ + + -- cgit v1.2.3