++ - Operator Vorrangpuzzle

7

Für die lange Zeit dachte ich, ich bekomme es, und ich wollte ein paar Puzzles erstellen, um einige meiner "Schüler" zum Thema Vorrang von Operatoren in c # zu lernen. Aber es kam heraus, dass ich es immer noch nicht richtig verstehe. 

Rätsel: Was ist die Ausgabe hier?

%Vor%

Ausgabe:

-2 0

Alles klar hier, ich habe das erwartet

Als nächstes das Problem:

%Vor%

Ausgabe:

-1 0

Nun, hier habe ich auch erwartet, dass ich -2 bin ... Jetzt versuche ich, die Rangfolge der Operatoren und die Reihenfolge der Auswertung anzuwenden, und nicht sicher, ob ich es mir selbst erklärt habe. Lesen Sie diesen Beitrag noch ein paar Mal heute, aber immer noch nicht ganz verstanden warum ist das Ergebnis hier -1? Kann jemand helfen, wie das zweite Ergebnis bewertet wird? Warum und wie ist es anders als das erste?

    
jure 30.04.2013, 23:02
quelle

5 Antworten

15

b-- ist nachher dekrementieren. Also:

%Vor%

Endergebnis der Addition: -1.

    
Robert Harvey 30.04.2013, 23:06
quelle
10

Machen Sie, was der Compiler macht: Zerlegen Sie ihn langsam und sicher in äquivalente Programme.

%Vor%

entspricht

%Vor%

entspricht

%Vor%

entspricht

%Vor%

Und jetzt kommentieren Sie jedes mit seinem Wert:

%Vor%

Genau so behandelt der Compiler diese Situation; Der Compiler ist nur ein bisschen schlauer bei der Optimierung der Provisorien. Das Analysieren von Ausdrücken wird einfach, wenn Sie es einfach in einfachere Schritte zerlegen .

    
Eric Lippert 30.04.2013 23:46
quelle
2
%Vor%

Zerlege es Schritt für Schritt:

%Vor%

Hier wird y auf b (0) gesetzt, dann wird b auf -1 dekrementiert.

%Vor%

Hier wird y (0) zu b (dekrementiert zu -1 im vorhergehenden Schritt) addiert, wobei -1 gleich ist, dann wird b auf null inkrementiert. Ausgabe:

%Vor%     
Madbreaks 30.04.2013 23:09
quelle
0

Postfix -- / ++ gibt den ursprünglichen -Wert der Variablen zurück. Also:

Mit Ihrem Beispiel b-- + b++ :

  • b-- bedeutet dekrement b, gib den ursprünglichen Wert zurück. Also ist b = b - 1 , b jetzt -1 und der Wert des Ausdrucks ist 0 .
  • b++ bedeutet Inkrement b, gibt den ursprünglichen Wert zurück. Also ist b = b + 1 , b jetzt 0 und der Wert des Ausdrucks ist -1 .
  • Dann, 0 + -1 == -1 . Das ist y . b ist immer noch 0 .
porges 30.04.2013 23:09
quelle
0

Diese Frage wurde beantwortet, aber ich wollte die Antwort anders formulieren.

%Vor%

Der Ausdruck b-- ergibt 0 (der ursprüngliche Wert von b) und hat den Nebeneffekt (nach der Auswertung angewendet), dass b auf -1 dekrementiert wird.

Der Ausdruck b++ ergibt (aufgrund des vorherigen Nebeneffekts) -1 und hat den Nebeneffekt (nach der Auswertung angewendet), b auf 0 zu erhöhen.

Damit bleibt der Ausdruck 0 + -1 , der -1 ist.

    
Tergiver 01.05.2013 16:37
quelle

Tags und Links