Ученик (80), решён 1 год назад
Инкремент как работает 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.
1 год
можно поподробнее, что к чему прибавили и в какой последовательности, чтобы получить 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: - Складывается a + 5 // 10
- Увеличивается значение a из-за постфиксной формы инкремента // 6
- Увеличивается значение a из-за префиксной формы // 7
- 10 + 7
- присваивание значения 17 переменной b
- ++a // 1 (кстати да, префиксная форма инкремента по приоритету выше чем умножение)
- ++a // 2
- a * 2 // 4
- a + 2 // 4
- сложение 4 + 1
- сложение 5 + a // 7
- a++ // 3
- сложение 7 + 1
- 8 + 4
- int c = 12;
Все вопросы
Категории
Избранные