totalAmount увеличения и уменьшения - PullRequest
1 голос
/ 10 марта 2012
namespace rojak2.cs
{
    class Program
    {
        static void Main(string[] args)
        {
            ArithmeticOperators();
        }

        static void ArithmeticOperators()
        {
            double totalAmount = 100;
            double result;

            Console.WriteLine("totalAmount is {0}", totalAmount);
            Console.WriteLine();

            result = totalAmount + 100;
            Console.WriteLine("totaAmount is {0}", result);

            result = totalAmount - 50;
            Console.WriteLine("totaAmount is {0}", result);

            result = ++totalAmount;
            Console.WriteLine("totaAmount is {0}", totalAmount);

            result = --totalAmount;
            Console.WriteLine("totaAmount is {0}", totalAmount);
        }
    }

}

мой вопрос: почему последний результат результата равен 100, а не 99?оно должно быть уменьшено со 100 до 101. Я не совсем понимаю.

Ответы [ 3 ]

2 голосов
/ 10 марта 2012

из-за preincrement.Значение переменной увеличивается до того, как ее значение будет скопировано в результат.Таким образом, результат будет иметь значение 101 как результат преинкремента, а также как декремент - сначала вычитается один, а затем копируется значение, следовательно, вы получите результат как 100.

1 голос
/ 10 марта 2012

Линия

result = ++totalAmount;

Изменяет не только result, но и totalAmount;Вот почему в последней строке это 101, а не 100

1 голос
/ 10 марта 2012

Должно быть уменьшено со 100, а не 101

Почему?Вы можете сказать , что totalAmount - это 101 перед этим оператором, поскольку это вывод предыдущей строки!

Давайте посмотрим, как переменные изменяются в течение кода:

double totalAmount = 100;
double result;
result = totalAmount + 100;

// totalAmount = 100; result = 200

result = totalAmount - 50;

// totalAmount = 100; result = 50

result = ++totalAmount;

// totalAmount = 101, result = 101

result = --totalAmount;

// totalAmount = 100, result = 100

Я подозреваю, что это увеличение / уменьшение префикса вас смущает.

Это утверждение:

result = ++totalAmount;

В основном эквивалентно:

totalAmount = totalAmount + 1;
result = totalAmount;
...