Wenn x = 3 und z nicht zugewiesen ist, warum wird z = x- - - x zu 2?

7

wenn x = 3 und z nicht zugewiesen ist,
Warum berechnet z = x-- - --x 2?

Mein Professor hält gerade darüber Vorlesungen, und ich bin gerade mit diesem Dilemma beschäftigt. Leider kann niemand erklären, warum es passiert.

    
arscariosus 14.06.2012, 07:47
quelle

3 Antworten

17

auf x--, x = 3 und danach ist es 2. auf --x, x = 1, weil die Subtraktion (von 2) vorher erfolgt.

Daher 3 - 1 = 2.

    
zvona 14.06.2012, 07:49
quelle
8

Hier ist die Reihenfolge der Operationen, illustriert zum besseren Verständnis:

  • x - - --x Wert von x beibehalten (lasst es tmpA nennen). tmpA ist 3.
  • x - - --x Verringert x. Es ist jetzt 2.
  • x-- - - x Verringert x. Es ist jetzt 1.
  • x-- - - x Halte Wert von x (lasst es tmpB nennen). tmpB ist 1.
  • x-- - --x Führt eine Unterstruktur von berechneten Werten aus. 3 - 1 = 2.

-- prefix bedeutet, dass die Dekrementierung vor der Auswertung des Ausdrucks erfolgt und postfix -- bedeutet, dass die Dekrementierung nach Auswertung des Ausdrucks erfolgt.

    
SimpleVar 14.06.2012 07:52
quelle
5

Ok, es ist ziemlich einfach:

Lassen Sie uns Klammern hinzufügen:

z = ( x-- ) - ( --x )

^^ So sieht der Compiler Ihren Code nach dem Tokening.

Der Compiler berechnet die Gleichung (rechter Teil) von links nach rechts

Jetzt,

x-- ist gleich POP der Wert von x und dekrementiert es dann und PUSH zurück Wert in einen Speicher. Ok, machen wir es:

Der aktuelle Wert von X ist 3, dekrementiert ist 2 - also erhalten wir in Gleichung 3, aber X wird den neuen Wert 2 enthalten.

--x ist gleich Dekrement X-Wert und dann POP diesen Wert in die Gleichung. Lass es uns tun:

Der aktuelle Wert von X ist 2 (weil die vorherige Operation ihn dekrementiert hat), und jetzt wollen wir ihn noch einmal verringern. 2-1 = 1, verstanden.

Nun zurück zur ganzen Gleichung: z = (3) - (1) = 2 .

    
Vitaly Dyatlov 14.06.2012 07:56
quelle

Tags und Links