Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » Logik » Inkrement- und Dekrementoperatoren » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Inkrement- und Dekrementoperatoren
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
SixFeetUnder
unregistriert
Inkrement- und Dekrementoperatoren Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Hallo zusammen,

ich habe das folgende Programm:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
package ausarbeitung;

public class Ausarbeitung 
{
    public static void main(String[] args) 
    {
        int x, a=5;
        x = a * a++ * ++a;                             
        System.out.println(x);
    }
}




Ich weiß, dass man so niemals programmieren würde; Trotzdem versuche ich mich an der Ausgabe.

Meine Ideen:
Folgendes Vorgehen:

Ich sehe mir die Zeile an, Inkrement-Operator hat eine höhere Priorität als das * - Zeichen. Da ich zwei Inkrement - Operatoren in meiner Zeile habe, erfolgt die Assoziativität von rechts. Also wird das ++a auf 6 gesetzt, somit ist a=6.

Also steht als Ausdruck:

code:
1:
 x = a * a++ * 6;  


Als nächstes ist dann a++ dran, hier müsste aber a auf 6 bleiben, da es Postinkrement ist.

Also habe ich:

code:
1:
 x = a * 6 * 6;  


Und erst jetzt wird a = 7;

Somit wäre die letzte Zeile:

code:
1:
 x = 7*6*6;  


Als Endergebnis dann 252. Meine IDE sagt aber 175.

Daher meine Frage an Euch, wo habe ich hier einen Fehler?

Vielen Dank
22.10.2015 01:06
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Stichwort: linksassoziativ.
code:
1:
2:
3:
x = (a * a++) * ++a;
x = a * a++; //5 * 5 = 25
x *= ++a; //x *= 7 -> x =175


__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 22.10.2015 05:58.

22.10.2015 05:57 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
SixFeetUnder
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Danke für die Rückmeldung Daumen hoch
27.10.2015 05:48
SixFeetUnder
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Eine Frage noch:

Ich habe den folgenden Code:

code:
1:
int sum = -5*6*-9/4;


Hier wird doch das unäre Minus zuerst der 9 (Assoziativität rechts) zugeordnet, dann das unäre Minus der 5. Danach kommt die Multiplikation (Assiziativität links), sprich -5*6 = -30;
Danach -30*-9 = 270 und zuletzt dann 270 / 4 = 67 (da es zwei Integer - Zahlen sind).

Ist das richtig von der Interpretation?
27.10.2015 06:17
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Stimmt alles.

__________________
Syntax Highlighting fürs Board (Link)
27.10.2015 17:18 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
SixFeetUnder
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Dankeschön :-)
28.10.2015 04:04
SixFeetUnder
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Irgendwie werden die Fragen nicht weniger :-)

code:
1:
2:
double a=3.59, b=7.98;         
System.out.println( (++b + -a++) / (b++) );


Welche Priorität haben denn eigentlich die Klammern? Ist die Assoziativität dann links oder rechts?
28.10.2015 04:18
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

/ arbeitet von links nach rechts.
Hier eine Zeile mit gleicher Ausgabe:
code:
1:
System.out.println( (8.98 + -3.59) / (8.98) );


__________________
Syntax Highlighting fürs Board (Link)
28.10.2015 05:56 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
SixFeetUnder
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Also geht es garnicht um die Klammern, sondern nach der Zuweisung des unären Minus zu 3,59 sofort zu dem geteilt Zeichen?
29.10.2015 04:01
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

So sieht der Baum aus:
code:
1:
2:
3:
4:
      /
    +   b++
++b   -
     a++

Beim geteilt wird mit der Zerlegung begonnen. Das schreibt vor, erst die linke Seite abzuarbeiten, also das +.
Hier geht es wieder von links nach rechts, also erst das b erhöhen. Dann wird -(a++) addiert.

__________________
Syntax Highlighting fürs Board (Link)
29.10.2015 05:51 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » Logik » Inkrement- und Dekrementoperatoren