Предварительное увеличение и последующее увеличение

У меня возникают проблемы с пониманием того, как Post Increment (++), Предварительное увеличение (--) и сложение / вычитание работают вместе в примере.

x++ означает добавить 1 к переменной.

x-- означает вычесть 1 из переменной.

Но меня смущает этот пример:

int x = 2, y = 3, z = 1;`

y++ + z-- + x++;

Я предполагаю, что это означает 3(+1) + 1(-1) + 2(+1) Что означает, что результат должен быть 7.

Но когда я его компилирую, я получаю 6, Я не понимаю

int main() {
int x=2, y=3, z=1;
int result;

result = y++ + z-- + x++;    //this returns 6

cout << result << endl;
return 0;
}

2

Решение

 result = y++ + z-- + x++;
3     1      2  = 6

если вы выполните это снова

 result1 = y++ + z-- + x++;
4     0      3  = 7

причина

operator++ возвращает исходное значение до увеличения переменной.

а также

++operator возвращает увеличенное значение

-- такой же, как и выше, только его декремент

6

Другие решения

Потому что постфикс operator++ возвращает исходное значение до увеличения переменной. Префикс operator++ увеличивает переменную и возвращает ссылку на нее. Поведение может быть легко проиллюстрировано на примере:

#include <iostream>

int main()
{
int n = 1;
std::cout << n++ << "\n"; // prints 1
std::cout << n << "\n";   // prints 2

int m = 10;
std::cout << "\n";
std::cout << ++m << "\n"; // prints 11
std::cout << m << "\n";   // prints 11
}
10

когда ты пишешь x++ он использует текущее значение x а затем увеличивает его на единицу.

ты хочешь написать ++x вместо этого, если вы хотите увеличить в первую очередь.

5

Pre-increment operator(++p) сначала увеличьте значение и назначьте его и post increment operator(p++) сначала присвойте значение, а затем выполните операцию инкремента. Здесь все переменные являются постинкрементными, т. е. первоначально присваивают свое значение (в буфере), затем увеличивают (для y и x на 1) и уменьшают z на 1., т.е.
первоначально назначьте 3 + 1 + 2 в буфере (добавление выполняется для значения буфера), а затем выполните увеличение / уменьшение как x = 3, y = 4 и z = 0

для получения дополнительной информации вы можете прочитать ответ на Каков правильный ответ для cout << C ++ << с ;? а также Почему эти конструкции (использующие ++) неопределенного поведения? вопросы

3

Положение ++ иметь значение.

Если ++ предшествует переменной, например, ++counterвозвращаемое значение
значение в счетчике после его увеличения. Если ++ следует за
переменная, например counter++, возвращаемое значение является значением в счетчике
прежде чем он был увеличен.

(источник)

2

Postincrement / postdecrement будет увеличивать / уменьшать переменную, но оценивать ее как «предыдущее» значение.

Итак, выражение result = y++ + z-- + x++ будет действовать что-то вроде:

result = y + z + x;  // result == 6

// perform the 'post' operations
y += 1;
z -= 1;
x += 1;

Тем не менее, имейте в виду, что компилятор будет выполнять оценку исключительно строго. Для этого выражения результаты хорошо определены, и вы в конечном итоге, как в примере. При использовании нескольких операций увеличения / уменьшения в одном и том же выражении легко включить неопределенное поведение, когда вы не сможете ожидать чего-то конкретного от выражения. Увидеть Почему эти конструкции (использующие ++) неопределенного поведения? для деталей.

1

Причина проста.
Здесь используется принцип ассоциации, который вычисляет значения в соответствии с приоритетами операторов.

ТАКЖЕ X++ или же X-- значит … ИСПОЛЬЗОВАТЬ, ЧЕМ ИЗМЕНИТЬ …
Сначала он будет использовать значение и увеличивать или уменьшать его.
Если вы хотите получить вывод 7
попробуй это .. это может сработать …

result = ++y + z-- + x++;
1

i++/i-- это пост приращение и уменьшение переменной …

таким образом, в нашем выражении для решения будет принято начальное значение, а затем inc / dec на 1.

int x = 2, y = 3, z = 1;
y++ + z-- + x++;
2   + 3   + 1    = 6
0
По вопросам рекламы [email protected]