Datentypen Auswertung von Ausdrücken (Teil 1)

willeswissen

Mitglied
hi, allerseits. das ist ein tolles forum. ich habe hier angemeldet, weil ich gerade dabei bin Java und C zu erlernen, wobei der schwerpunkt zunächst auf Java liegt.

ich habe viele fragen, die ich loswerden will und hoffe ihr könnt mir dabei helfen. so ... nun auf zum ersten Problem ;)

=====================================================================

In diesen Betrachtungen spielen Operator-Prioritäten, die Assoziativität und die Auswertungs-Reihenfolge von Operanden eine Rolle.

Die Quellen für meine Aussagen, Fragen und Vermutungen bilden die Bücher:
  • "Java als erste Programmiersprache"
  • "C - Das Grundlagenbuch"

Zunächst einmal einige Definitionen zu den o.g. Begriffen und mein Verständnis davon.

Operator-Priorität

- anhand der Operator-Priorität erkennt der Compiler die Abarbeitungs-Reihenfolge von (Teil-)Ausdrücken.
- Bsp.:

Code:
	int a=1;
	int b=2;
	int c=3
	int d=4;
	
	a + b * c + d

Die Abarbeitungs-Reihenfolge des Codes ist:
  1. b*c (=6)
  2. a+6 (=7)
  3. 7+d (=11)
Da dem Comiler die Prioritäten bekannt sind gilt hier: Prio(*) ist größer als Prio(+). Das Ergebnis wird korrekt berechnet.
Vielmehr noch kommt auch ab Schritt (2) die Assoziativität ins Spiel, da 2 Mal der "+" verwendet wird, wobei hier eine Abarbeitung von links -> rechts geschieht.


Assoziativität

- die Assoziativität bestimmt die Abarbeitungs-Reihenfolge von (Teil-)Ausdrücken bei Verwendung von Operatoren gleicher Priorität
- es gibt die beiden Abarbeitungs-Reihenfolgen:
- von links nach rechts (links -> rechts)
- von rechts nach links (rechts -> links)​
- Bsp.: siehe Operator-Priorität


Auswertungs-Reihenfolge von Operanden

- in Java ist sie immer links -> rechts
- Bsp.: a + b * c + d

- hier werden in Java die Werte der Operanden a,b,c,d in genau derselben Reihenfolge ausgewertet

Frage 1:
Wie ist die Operanden-Auswertungsreihenfolge in C?​

Frage 2:
Ich verstehe nicht ganz, weshalb zwischen der Reihenfolge der Abarbeitung von Operatoren und der Reihenfolge der Bewertung von Operanden unterschieden wird.

Ich stelle mir es so vor, dass die Operanden-Auswertung gleichzeitig mit der Feststellung der Operator-Reihenfolge, die ja die Abarbeitungs-Reihenfolge eines ganzen Ausdrucks bestimmt, geschieht. So würde im obigen Beispiel folgendes stattfinden:

(1) b*c // hierbei würden zunächst b und c als Operanden von "*" erkannt und ihre Werte festgestellt und dieser Teil-Ausdruck berechnet

(2) a+(b*c) // als nächsten würde die Assoziativiät entscheiden, welches "+" ausgeführt wird (hier gilt: links -> rechts), was bedeutet, dass der Wert von a als erster Operand erkannt wird und festzustellen ist; als zweiter Operand wird das Teil-Ergebnis (b*c) erkannt, welches zu diesem Zeitpunkt bereits bekannt ist

(3) (a+b*c)+d // Feststellung des ersten Operanden der zweiten Addition (a+b*c), welcher bereits bekannt ist und des zweiten Operanden (d)


- bei dem betrachteten Beispiel ist meine Ansicht noch recht egal, es sich bei den 4 Operanden um unterschiedliche Variablen handelt. interessant wird es bei Beispielen, in denen dieselbe Variable mehrfach in einem Ausdruck verwendet wird

Code:
int x=5, y=0;

y= (x=2) + (x = x-1);

Frage 3:
Laut Java-Buch wird zunächst (x=2) bewertet und dann (x=x-1) nach der Regel ("die Operanden-Auswertung geschieht in Java von links -> rechts).

Wie ist es aber in C?

Und vor allem würde ich selbst in diesem Beispiel nicht die "links -> rechts Regel" als Grund für diese Abarbeitungs-Reihenfolgein Java heranziehen, sondern die Priorität/Assoziativität der Operatoren.
Folglich würde (x=2) zuerst bewertet und dann (x=x-1), weil zwei mal der Operator "()" verwendet wird, bei dem die Assiziativität links -> rechts gilt
 
Zuletzt bearbeitet:

Landei

Top Contributor
Operator-Priorität hat natürlich Vorrang vor "links nach rechts", dieses gilt nur bei gleichen Prioritäten "links nach rechts" (z.B. 25/5/5 == (25/5)/5 == 1).

Übrigens: Warum schmeisst du nicht einfach einen C-Compiler an und testest auf Unterschiede zu Java?
 

willeswissen

Mitglied
@Landei
da wo ich jetzt und die nächsten tage bin, habe ich keinen Compiler, Programmierumgebung etc. nur die bücher :-D außerdem habe ich keine ahnung vom assembler und kann foglich nicht den output analysieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Operatoren Seiteneffekte bei Auswertung von Ausdrücken Java Basics - Anfänger-Themen 9
H Erste Schritte Warum misslingt die Auswertung des ersten Aufrufparameters? Java Basics - Anfänger-Themen 4
topi Parentabfrage, danach "if"-Auswertung Java Basics - Anfänger-Themen 3
D Erste Schritte Weblog-Auswertung Java Basics - Anfänger-Themen 252
D statistische Auswertung Java Basics - Anfänger-Themen 1
C Auswertung Ausdruck mit Punknotation + Objekt als Parameter Java Basics - Anfänger-Themen 3
S JTextfield Auswertung mit FocusListener Java Basics - Anfänger-Themen 7
L Problem mit Auswertung von String mit if Java Basics - Anfänger-Themen 10
T Log-Datei Auswertung Java Basics - Anfänger-Themen 7
B [Javadoc] Tutorial für die Auswertung des docs Java Basics - Anfänger-Themen 15
N auswertung von bildern Java Basics - Anfänger-Themen 14
C Denkanstoss für meine Auswertung Java Basics - Anfänger-Themen 5
C Auswertung Java Basics - Anfänger-Themen 5
B Auswertung eines Ausdrucks Java Basics - Anfänger-Themen 10
M seltsames Phänomen in der Auswertung boolscher Variablen Java Basics - Anfänger-Themen 7
V Grafische Auswertung (Ampel-System) Java Basics - Anfänger-Themen 12
M zahlenimport und auswertung Java Basics - Anfänger-Themen 5
C Interface Parameter und Rückgabewerte in Lambda Ausdrücken verwenden Java Basics - Anfänger-Themen 16
W Regulären Ausdrücken Java Basics - Anfänger-Themen 8
A Zusammengesetzte Nomen/Straßennamen mit Regex-Ausdrücken trennen Java Basics - Anfänger-Themen 8
sserio Frage zu Lambda Ausdrücken Java Basics - Anfänger-Themen 7
F Frage zu regulären Ausdrücken Java Basics - Anfänger-Themen 4
E Hilfe bei Lambda-Ausdrücken in BlueJ Java Basics - Anfänger-Themen 1
S Fragen zu Ausdrücken&Bedingungen Java Basics - Anfänger-Themen 5
S Frage zu regulären Ausdrücken Java Basics - Anfänger-Themen 6
B Nach regulären Ausdrücken suchen Java Basics - Anfänger-Themen 14
A Counter für die anzahl von regulären ausdrücken Java Basics - Anfänger-Themen 4
M Rekursion Iterativ ausdrücken Java Basics - Anfänger-Themen 3
X O-Notation ausdrücken Java Basics - Anfänger-Themen 7
F Aus Regulären Ausdrücken Zufallszahlen bilden Java Basics - Anfänger-Themen 6
O regulären Ausdrücken Java Basics - Anfänger-Themen 2
T HTML Kommentare mit regulären Ausdrücken entfernen Java Basics - Anfänger-Themen 4
D Klammern in regulären Ausdrücken Java Basics - Anfänger-Themen 2
G Problem mit Regulären Ausdrücken Java Basics - Anfänger-Themen 4
J Verschiedene Ausgaben bei gleichen Ausdrücken (Typecasting?) Java Basics - Anfänger-Themen 5
G Area mit Teil-Image füllen Java Basics - Anfänger-Themen 0
R Audio kann nur zum Teil gestoppt werden Java Basics - Anfänger-Themen 1
I Innerhalb einem Bild ein Teil austauschen Java Basics - Anfänger-Themen 26
G Teil(e) eines Strings entfernen wenn spezifische Zeichen (< & >) vorkommen Java Basics - Anfänger-Themen 5
D ergebnis.matches("[1-9]?[0-9].[0-9][0-9]?") ein teil eines größeren Strings Java Basics - Anfänger-Themen 12
J Java Sternchen ausgabe teil 2 Java Basics - Anfänger-Themen 20
G Teil einer String speichern Java Basics - Anfänger-Themen 4
F Abstrakte Klasse doch zum "Teil" instanzieren? Java Basics - Anfänger-Themen 4
F Teil eines Byte Array an eine Methode übergeben Java Basics - Anfänger-Themen 5
J Bestimmter Teil aus Zeichenfolge Java Basics - Anfänger-Themen 2
S Text in einem JLabel nur zum Teil Fett Java Basics - Anfänger-Themen 2
M bestimmten Teil eines Strings entfernen Java Basics - Anfänger-Themen 4
D Wie den HTML-Teil des Chat Tutorials aus dem FAQ-Bereich starten? Java Basics - Anfänger-Themen 5
S Methoden Textdatei Teil String auslesen Java Basics - Anfänger-Themen 3
U Kann man in Java ein Array zum Teil vorbelegen? Java Basics - Anfänger-Themen 4
C bestimmten Teil von string removen Java Basics - Anfänger-Themen 4
C [Sammelthread] Fragen zu Quaxlis Tutorial Teil 1 Java Basics - Anfänger-Themen 8
D p q formel gibt zum Teil falsche Werte aus Java Basics - Anfänger-Themen 5
S Filelist Ausgabe (nur den letzten teil) Java Basics - Anfänger-Themen 8
R Teil eines Strings übertragen Java Basics - Anfänger-Themen 3
C Verzweigung Teil 2 Java Basics - Anfänger-Themen 13
2 Mehrfachvergleich Teil von String Java Basics - Anfänger-Themen 5
S Teil derGUI zeigt sich erst später Java Basics - Anfänger-Themen 2
F Teil-Array Java Basics - Anfänger-Themen 15
B Teil eines Bild kopieren bei verschiedenen Zoomstufen Java Basics - Anfänger-Themen 3
C Verstehe Code-Teil nicht. Java Basics - Anfänger-Themen 2
S Passwortgeschützter Text Teil 3 Java Basics - Anfänger-Themen 6
S Passwortgeschützter Text Teil 2 Java Basics - Anfänger-Themen 27
C Teil Problem Java Basics - Anfänger-Themen 11
T Teil eines Strings farbig gestalten Java Basics - Anfänger-Themen 10
G " als Teil von Strings verwenden Java Basics - Anfänger-Themen 9
R Teil eines Arrays übergeben Java Basics - Anfänger-Themen 1
G Teil eines Files einlesen und vergleichen Java Basics - Anfänger-Themen 4
G Teil im Code überspringen. Java Basics - Anfänger-Themen 3
M 2 Fragen: Vergleich, aber wie? Was passiert in diesem Teil? Java Basics - Anfänger-Themen 18
S neuer String zur jedem Teil von List Java Basics - Anfänger-Themen 2
G If-Abfrage, die nur einen Teil eines Strings vergleicht Java Basics - Anfänger-Themen 3
B Frage zum Tutorial "JTable - Teil 5 - Verändern von Dat Java Basics - Anfänger-Themen 6
S Teil eines Strings ermitteln Java Basics - Anfänger-Themen 2
V Teil eines Programms funktioniert einfach nicht Java Basics - Anfänger-Themen 2
G benötige nur einen teil eines strings Java Basics - Anfänger-Themen 7
K Datei lesen und nur zum Teil wieder ausschreiben Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben