-1

重複の可能性:
i == 0の場合、C#で(i + = i ++)== 0であるのはなぜですか?

これはロジック実装ではなく、プレフィックス++を使用する必要があることはわかっていますが、このコードに興味があります。

int a = 1;
a = a++;
Console.Write(a);

結果は2になると思いますが、そうではありません。なぜ結果1なのですか?aに等化された後a、の値がa増加しました。しかし、++操作は別の次元で実行されているようです:)

4

5 に答える 5

16

++ の後に置くと、古いaを返すように指示されてからインクリメントされます。同時に、増分は割り当ての前に行われるため、古い値は失われます。同等のコードは次のとおりです。

int a = 1;
int temp_old_a = a; //temp_old_a is 1
a = temp_old_a + 1; //increments a to 2, this assignment is from the ++
a = temp_old_a; //assigns the old 1 value thus overwriting, this is from your line's assignment `a =` operator
Console.Write(a); //1

したがって、最終的に、増分された値がどのように破棄されるかを確認できます。一方、++ に置く場合a

int a = 1;
a = ++a;
Console.Write(a); //2

それは次のように機能します:

int a = 1;
int temp_old_a = a;
temp_old_a = temp_old_a + 1;
a = temp_old_a; //assigns the incremented value from the ++
a = temp_old_a; //assigns again as per your original line's assignment operator `a =`
Console.Write(a); //2

この場合、式の一部として変数をインクリメントするときに、変数を再割り当てすることは通常意味がありません。ほとんどの場合、単にインクリメントするだけの方が良いでしょう。

int a = 1;
a++; //or ++a, but I find a++ is more typical
Console.Write(a); //2

通常、そのようなコードを表示する方が標準的であり、混乱がはるかに少なくなります(ご存知のとおり)。

于 2013-01-05T20:17:02.843 に答える
5

a++ポストインクリメントであり、それが機能する方法です。値を返した、変数をインクリメントするのように動作します。実際には値をインクリメントしますが、前の値を返します。

++a一方、pre-incrementは、希望どおりに動作します。

于 2013-01-05T20:17:35.357 に答える
2

なぜならa++、ポストインクリメントです-最初に戻り値を返し、次にそれを増やします。この場合、使用する必要があるのは

int a=1;
a++;
Console.Write(a);

また

int a = 1;
a = ++a;
Console.Write(a);

++aはプリインクリメントです-最初に値を増やし、次に増加した値を返します。

于 2013-01-05T20:17:27.180 に答える
0

注:一部の言語は次の構文を受け入れます。

a = ++a

これはあなたが提案したように機能し、最初にインクリメントし、後でそれを返します:)

于 2013-01-05T20:21:39.887 に答える
0

後置として使用される++オペランドは、値が使用された後にのみ変数をインクリメントするためです。プレフィックスとして++オペランドを使用する場合、変数はその値が使用される前にインクリメントされます。

例えば:

ケース1:後置の使用

int a = 1;

int b;

b = a++;

ケース2:プレフィックスの使用

int a = 1;

int b;

b = ++a;

「ケース1」ではb変数に値1が割り当てられ、「ケース2」では値2が割り当てられます。

于 2013-01-05T20:27:53.753 に答える