C#

Инкремент как работает C#

int a = 0; int c = ++а + 2 + 1 + a++ + 1 + ++a * 2; Чему здесь будет равен c и можно решение по действиям, как это решать
Лучший ответ
 int a = 0; 
int c = 0;
a = a + 1; // a == 1 | ++a
c = c + a; // c == 1 | c = ++а
c = c + 2; // c == 3 | c = ++а + 2
c = c + 1; // c == 4 | c = ++а + 2 + 1
c = c + a; // c == 5 | c = ++а + 2 + 1 + a++
a = a + 1; // a == 2 | a++
c = c + 1; // c == 6 | c = ++а + 2 + 1 + a++ + 1
a = a + 1; // a == 3 | ++a 
c = c + a * 2; // c == 12 | c = ++а + 2 + 1 + a++ + 1 + ++a * 2 
Указанное в вопросе выражение - эталонный говнокод, за появление которого в реальном проекте тебя будут долго елозить мордой по столу. Главное правило: в процессе вычисления выражения значение каждой переменной должно меняться НЕ БОЛЕЕ одного раза. У тебя же значение переменной a меняется ТРИ раза.
Остальные ответы
c = 12 и a = 3.
можно поподробнее, что к чему прибавили и в какой последовательности, чтобы получить c
Указанное выражение будет обрабатываться по правилам обратной польской записи, преинкременты будут происходить в процессе, постинкремент - после окончания вычислений. Чтобы избежать головняка, вызываемого подобными записями, и потенциальной зависимости от компилятора, избегай множественных инкрементов внутри арифметических выражений.
>>Чему здесь будет равен c и можно решение по действиям, как это решать Поведение этого кода не определено стандартом языка поэтому возможно различные толкования. Даже различный результат при использовании одного и того же компилятора но с различным уровнем оптимизации.
Инкремент бывает двух видов: префиксный и постфиксный. Префиксная форма инкремента (++a): Сначала выполняется увеличение переменной на единицу и только после этого считается операция, в которой участвует переменная. Пример:
 int a = 5;
int b = 5 + ++a; // в переменную b сохранится 11 
Постфиксная форма инкремента (a++): Сначала считается операция в которой участвует переменная, а после увеличивает переменную на единицу. Пример:
 int a = 5;
int b = 5 + a++; // в переменную b сохранится 10 
Действие постфикс распространяется только на одну операцию, а не на все выражение целиком. Пример:
 int a = 5; 
int b = a++ + 5 + ++a; // в переменную b сохранится 17 
Во второй строчке выражение одно, а операций 5:
  1. Складывается a + 5 // 10
  2. Увеличивается значение a из-за постфиксной формы инкремента // 6
  3. Увеличивается значение a из-за префиксной формы // 7
  4. 10 + 7
  5. присваивание значения 17 переменной b
В твоем случае последовательность операций во втором выражении следующая:
  1. ++a // 1 (кстати да, префиксная форма инкремента по приоритету выше чем умножение)
  2. ++a // 2
  3. a * 2 // 4
  4. a + 2 // 4
  5. сложение 4 + 1
  6. сложение 5 + a // 7
  7. a++ // 3
  8. сложение 7 + 1
  9. 8 + 4
  10. int c = 12;