Порядок операций c # - PullRequest
       11

Порядок операций c #

0 голосов
/ 10 ноября 2018

Я пытаюсь понять, почему следующее возвращает это значение. Любая помощь будет оценена.

int ans = 10, v1 = 5, v2 = 7, v3 = 18;
ans += v1 + 10 * (v2-- / 5) + v3 / v2;
Console.WriteLine(ans);// prints 28

Сначала я думаю о скобках: деление, умножение, а затем сложение. Так что шаги будут: v1 + 10 * (v2-- / 5) + v3 / v2

  1. (v2-- / 5) = 1,4, тогда v2 устанавливается на 6.
  2. v3 / v2 = 3
  3. 10 * (v2-- / 5) = 14
  4. 5 + (14) + (3) = 12

Следовательно, (ans + = 12) = 22?

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Мартин: Шаг 1. неверен, потому что обе переменные являются целыми числами, результатом будет целое число, (v2-- / 5) = 1. Чтобы получить ответ 1.4, нужно изменить переменные на тип double.«Таким образом, у вас осталось 10 + = 5 + 10 * 1 + 3 = 28»

0 голосов
/ 10 ноября 2018

v2-- / 5)= 1.4 и есть ваша проблема. Целочисленное деление никогда не вернет нецелое значение.

1/2 равно 0, не 0.5 и 7/5 равно 1, не 1.4.

...