2017-02-07 2 views
1

Kann jemand bitte erklären, warum der C# ++ Operator verschiedene Ausgänge basierend auf den zugewiesenen Variablen bietet. https://msdn.microsoft.com/en-us/library/36x43w8w.aspxUnäre Präfix Erhöhung ++ Operator Verschiedene Ausgänge

int x = 0; 
int y = x++; 
Console.WriteLine($"x: {x}"); 
Console.WriteLine($"y: {y}"); 

/*Prints 
    * x: 1 
    * y: 0 
    */ 

Mein Verständnis ist y zu x gesetzt wird, die (0), dann nach der Zuweisung von y; x wird um 1 inkrementiert;

int x = 0; 
x = x++; 
Console.WriteLine($"x: {x}"); 

/*Prints 
* x: 0 
*/ 

Wie kommt es, dass die gleiche Logik hier nicht gilt? x sollte x eingestellt werden, die 0, dann ist nach der Zuweisung Inkrement x um 1 und Druck 1 statt 0

gleiche für dieses Beispiel

int x = 0; 
     x += x++; 
     Console.WriteLine($"x: {x}"); 
/*Prints 
* x: 0 
*/ 

Ein weiteres Beispiel

int x = 0; 
     x += x++ + x++; 
     Console.WriteLine($"x: {x}"); 
     /*Prints 
     * x: 1 
     */ 

scheint dass es im Hintergrund eine andere Logik gibt, die ich nicht verstehe.

+0

Detaillierte Beschreibung der Funktionsweise von ++ Operator (sowohl Präfix und Postfix) in C# ist hier: http: // stackoverflow.com/a/3346729/1286670 –

+0

@Steve Ich bin mir nicht sicher, ob es beabsichtigt war oder nicht, aber Sie änderten _ "Unary Prefix Increment' ++ 'Operator" _ zu _ "Unary Prefix Increment' + 'Operator" _ - nein so etwas – MickyD

+0

Ich glaube, Eric Lipperts Antwort von @ Ňuf gefunden deckt alle Anliegen dieses Beitrags. Wenn noch etwas fehlt - bitte [bearbeiten] Sie den Beitrag und klären Sie, welche Teile separat erklärt werden müssen. Bitte stellen Sie sicher, Schritt für Schritt Argumentation zu schreiben, wenn Sie eine Bearbeitung vornehmen - Sie sollten höchstens zusätzliche Schritte zusätzlich zu 5 Eric für ++ Operation bereitgestellt haben, um die gesamte 'x = x ++' Anweisung abzudecken. –

Antwort

-1

Sie haben den Operator falsch herum für das, was Sie versuchen zu tun.

Per der Dokumentation:

Der Inkrementoperator kann auftreten vor oder nach seinem Operanden: ++ ++ variablen und variablen

Die erste Form ein Präfix Inkrement Betrieb ist. Das Ergebnis der Operation ist der Wert des Operanden, nachdem dieser inkrementiert wurde.

Die zweite Form ist eine Postfix-Inkrementierung. Das Ergebnis der Operation ist der Wert des Operanden, bevor er inkrementiert wurde.

Also in Ihrem Codebeispiel werden Sie y-xvorx setzt erhöht. Wenn Sie es wünschen y zum neuen Wert setzen von x Sie müssen das Präfix Inkrementbetrieb verwenden, zu erhöhen x und haben das Ergebnis der neue Wert mit dem zu tun, wie Sie wollen:

int x = 0; 
int y = ++x; 
Console.WriteLine($"x: {x}"); 
Console.WriteLine($"y: {y}"); 
/*Prints 
    * x: 1 
    * y: 1 
*/ 
+1

Ich denke, was OP bekommen ist, dass er den Code als Int x = 0 gelesen; x ++; x + = 0; 'was gleich 1 wäre. –

2
int x = 0; 
x = x++; 

erste Operationen - speichern Anfangswert von x (0), die zweiten Operation - erhöhen x (1), dritte Operation - gespeicherten Wertes x zuweisen (0)

int x = 0; 
x += x++; 

In diesem Fall wird der erste Operand der Addition vor dem Inkrementieren (0) "eingefroren", der zweite Operand vor dem Inkrementieren ebenfalls "eingefroren" (0). Als Ergebnis 0 + 0 = 0

Verwandte Themen