Быстрая проверка операторов увеличения / уменьшения в переполнении стека

Перечислены два примера объявлений переменных:

Пример 1:

x = 10;
y = ++x;

Пример 2:

x = 10;
y = x++;

В книге сказано, что в Примере 1 Y равно 11, и в примере 2 Y равно 10. Я думаю, я понимаю, почему, и вот мои рассуждения, поэтому, пожалуйста, дайте мне знать, если у меня есть это и / или есть ли более краткий способ думать об этом.

В первом примере Y равен 11, потому что он просто установлен равным «x + 1», так как оператор приращения идет первым, тогда как во втором примере Y устанавливается равным исходному объявлению Икс а затем происходит операция приращения Икс по отдельности. Кажется, это имеет смысл, поскольку визуально в Примере 2 обе переменные находятся в непосредственной близости от знака равенства, и тогда операция «x + 1» будет выполняться в качестве запоздалой мысли к этому уравнению, не оказывая влияния на Y.

0

Решение

Ты прав.

y=++x

средства:
x++;
y=x;

ТЕМ НЕ МЕНИЕ,

y=x++;

средства:

y=x;
x++;

2

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

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

y = x++;

Приращение х после этой строки. Результат

y = 10, x = 11

Тогда как в

y = ++x;

Увеличьте х перед этой строкой. Результат

y = 11, x = 11
1

Золотое правило:

Увеличение / уменьшение префикса (++ x или —x) имеют ассоциативность справа налево.

Постфиксный инкремент / декремент (x ++ или x—) имеет ассоциативность слева направо.

x = 10

if (x++ == 11) {
// Post increment
}if (++x == 11 ) {
// Pre increment
}

Итак, в вашем случае:

Пример 1:

x = 10;
y = ++x;

Первоначальное значение x (здесь 10) сначала увеличивается, а затем присваивается y.

Пример 2:

x = 10;
y = x++;

Первоначальное значение x сначала присваивается y, а затем увеличивается (до 11).

1
По вопросам рекламы [email protected]