Что такое х после "х = х ++"? - PullRequest
       73

Что такое х после "х = х ++"?

268 голосов
/ 27 октября 2011

Что происходит (за занавесом), когда это выполняется?

int x = 7;
x = x++;

То есть, когда переменная увеличивается на единицу и присваивается себе в одном выражении? Я скомпилировал и выполнил это. x по-прежнему 7 даже после всего утверждения . В моей книге говорится, что x увеличивается!

Ответы [ 17 ]

6 голосов
/ 27 октября 2011

потому что x ++ увеличивает значение ПОСЛЕ присвоения его переменной.и так далее и во время выполнения этой строки:

x++;

переменная x будет по-прежнему иметь исходное значение (7), но снова использовать x в другой строке, например,

System.out.println(x + "");

даст вам 8.

, если вы хотите использовать увеличенное значение x в вашем операторе присваивания, используйте

++x;

Это увеличит x на 1, ТО затем присвойте это значениепеременная x.

[Edit] вместо x = x ++, это просто x ++;первый присваивает исходное значение x самому себе, поэтому он фактически ничего не делает в этой строке.

4 голосов
/ 27 октября 2011

Что происходит, когда int x = 7; x = x++;?

ans -> x++ означает сначала использовать значение x для выражения, а затем увеличить его на 1.
Это то, что происходит в вашем случае. Значение x в RHS копируется в переменную x в LHS, а затем значение x увеличивается на 1.

Точно так же ++x означает -> сначала увеличить значение x на единицу, а затем использовать в выражении. Так что в вашем случае, если вы делаете x = ++x ; // where x = 7
вы получите значение 8.

Для большей ясности попытайтесь выяснить, сколько операторов printf выполнит следующий код

while(i++ <5)   
  printf("%d" , ++i);   // This might clear your concept upto  great extend
3 голосов
/ 27 октября 2011

++x - это предварительное увеличение -> x увеличивается до использования
x++ является постинкрементным -> x увеличивается после использования

int x = 7; -> x get 7 value <br>
x = x++; -> x get x value AND only then x is incremented
1 голос
/ 27 октября 2011

Итак, это значит: x++ не равно x = x+1

потому что:

int x = 7; x = x++;
x is 7

int x = 7; x = x = x+1;
x is 8

и теперь это кажется немного странным:

int x = 7; x = x+=1;
x is 8

очень зависит от компилятора!

0 голосов
/ 14 марта 2018

Это потому, что вы использовали оператор постинкремента.В следующей строке кода

x = x++;

Что происходит, вы присваиваете значение x для x.x ++ увеличивает x после того, как значение x присвоено x.Вот как работают операторы постинкрементной обработки.Они работают после того, как заявление было выполнено.Таким образом, в вашем коде сначала возвращается x после того, как он затем увеличивается.

Если вы сделали

x = ++x;

Ответ будет 8, потому что вы использовали оператор предварительного увеличения.Это увеличивает значение перед возвратом значения x.

0 голосов
/ 14 декабря 2014

х = х ++;

Это оператор постинкрементного увеличения. Это следует понимать как «Использовать значение операнда и затем увеличивать операнд».

Если вы хотите, чтобы произошло обратное, т. Е. «Увеличить операнд, а затем использовать значение операнда», вы должны использовать оператор предварительного увеличения, как показано ниже.

х = ++ х;

Этот оператор сначала увеличивает значение x на 1, а затем присваивает значение обратно x.

0 голосов
/ 29 января 2014

Я думаю, что это противоречие можно разрешить, не вдаваясь в код и просто подумав.

Рассмотрим i ++ & ++ i как функции, скажем Func1 & Func2.

Теперь i = 7;
Func1 (i ++) возвращает 7, Func2 (++ i) возвращает 8 (это знают все).Внутри обе функции увеличивают i до 8, но они возвращают разные значения.

Так что i = i ++ вызывает функцию Func1.Внутри функции i увеличивается до 8, но по завершении функция возвращает 7.

Таким образом, в конечном итоге 7 присваивается i.(Итак, в итоге я = 7)

...