2

C# ++ (右配置) 演算子に関する質問です。

左に配置された ++ 演算子、たとえば、++var (1 の int 値を保持しているとします) は、他の計算が行われる前に 1 ずつインクリメントされます (たとえば、式が実行されて結果が表示された後、値 1 は 2 になります)。 .

左に配置されたオペレーターと右に配置されたオペレーターの違いを説明できる人はいますか? (var++) 式が実行された後でもインクリメントされないように見えるためです。サンプルコードは次のとおりです。

        int var1, var2 = 5, var3 = 6;

        var1 = var2++ * --var3;
        Console.WriteLine(" {0} ", var1);
        Console.ReadKey();

これは var3 の減少によりちょうど 5 x 5 ですが、減少がなければ 5 x 6 であり、var2++ はそれが運ぶ 5 の値以外には何の影響もないように見えます。誰かがこのトピックに光を当てることができれば、私は感謝しています. ありがとう。

***問題は解決しました。多くの素晴らしい回答と入力者がいて、どの回答を受け入れるかを決めるのに苦労しましたが、あなたはすべて勝者です! 助けてくれてありがとう!=)

4

5 に答える 5

5
        int var1, var2 = 5, var3 = 6;

        var1 = var2++ * --var3;
        Console.WriteLine(" {0} ", var1);
        Console.WriteLine(" {0} ", var2);
        Console.ReadKey();

出力:

25

6

期待どおりvar2にインクリメントされます。

于 2012-07-17T07:26:02.020 に答える
4

++x(プレフィックスのインクリメント)は、式が評価される前に値をインクリメントします。したがって、最初に値をインクリメントしてから返します。

x++(後置インクリメント)は、式が評価された後に値をインクリメントします。したがって、変更されていない値が返され、その後のみxインクリメントされます。

の行の後はvar1 = var2++ * --var3;、値が評価されたにインクリメントされたため、var2実際には です。6

だからあなたのコード:

var1 = var2++ * --var3;

次のようなことをします:

int oldVar2 = var2;
var2 = var2 + 1;
var3 = var3 - 1;
var1 = oldVar2 * var3;
于 2012-07-17T07:29:48.033 に答える
2

C# では、演算子と演算子の唯一の違いは、計算後の実際の戻り値です。left-placedright-placed

left-hand演算子の場合、返された新しい値、またはインクリメントされた値。

演算子の場合、実際の値がインクリメントされright-handたとしても、返される値は「古い」値です。

ただし、どちらの場合も、実行される一連の操作はまったく同じであることを知っておくことが重要です。

于 2012-07-17T07:28:48.920 に答える
1

値は、乗算の評価後var2インクリメントされます。乗算の評価前に値がデクリメントされます。大まかに次のように概念化できます。var3

    var tmp = var2; // 5
    var2 = var2 + 1; // 5 + 1 = 6
    var3 = var3 - 1; // 6 - 1 = 5;
    var1 = tmp * var3; // 5 * 5 = 25;

したがって、25 が正しいです。調べるvar2と、期待どおりに増加していることがわかります。

でも!++fooとを含む複雑な計算bar--が混乱する場合は、インラインで実行しないでください。計算をより単純な部分に分割し、それを実行します。コンパイラはあなたを判断しません。

于 2012-07-17T07:30:51.607 に答える
0

PreFixPostFixの インクリメント演算子の概念を利用したサンプル クラスを次に示します。コードはコメント付きで記述されているため、出力がより明確になります。

public class Test
    {
            public Test()
            { }


        public static void Main(string[] args)
        {
            int i = 0;

            Console.WriteLine("\n" + "Displaying Initial            i      =     " + i + "\n");   // Prints 0 i.e. Initial value of i

            Console.WriteLine("\n" + "Displaying PostFix            i++    =     " + i++ + "\n"); // Prints 0. Then value of i becomes 1.

            Console.WriteLine("\n" + "Displaying Post-incremented   i      =     " + i + "\n");   // Prints 1 i.e. Value of i after Post-increment

            Console.WriteLine("\n" + "Displaying PreFix             ++i    =     " + ++i + "\n"); // Prints 2. Then value of i incremented to 2

            Console.WriteLine("\n" + "Displaying Pre-incremented    i      =     " + i + "\n");   // Prints 2 i.e. Value of i after Pre-increment

            Console.WriteLine("\n" + "---------------------------------------------" + "\n");

            int j = 0;

            Console.WriteLine("\n" + "Displaying Initial            j      =     " + j + "\n");   // Prints 0 i.e. Initial value of j

            Console.WriteLine("\n" + "Displaying PreFix             ++j    =     " + ++j + "\n"); // Prints 1. Then value of j incremented to 1.

            Console.WriteLine("\n" + "Displaying Pre-incremented    j      =     " + j + "\n");   // Prints 1 i.e. Value of j after Pre-increment

            Console.WriteLine("\n" + "Displaying PostFix            j++    =     " + j++ + "\n"); // Prints 1. Then value of j incremented to 2.

            Console.WriteLine("\n" + "Displaying Post-incremented   j      =     " + j + "\n");   // Prints 2 i.e. Value of j after Post-increment

            Console.ReadLine();
        }
    }
于 2016-03-16T04:09:31.683 に答える