Операторы инкремента и декремента - PullRequest
0 голосов
/ 08 октября 2010
#include <stdio.h>

int main()
{
  int x = 4, y, z;
  y = --x;
  z = x--;
  printf("%d %d %d", x, y, z);
}

Выход: 2 3 3

Может кто-нибудь объяснить это?
А что означает i =+ j (предположим, i = 1 и j = 2)?

Ответы [ 12 ]

9 голосов
/ 08 октября 2010

y = --x означает «уменьшить x на единицу, а затем сохранить результат в y»

z = x-- означает «сохранить темп x. Уменьшить x на единицу. Сохранить значение temp в z»

Следовательно:

  • x начинается с 4.
  • Уменьшается на 1 (до 3).3 хранится в у.
  • x сохраняется в темп.х снова уменьшается (до 2).тогда temp (3) сохраняется в z.
  • y и z печатаются как 3, x печатается как 2.
6 голосов
/ 08 октября 2010

Оператор уменьшения постфикса (x--) возвращает значение переменной до того, как она была уменьшена.

  • x = 2, потому что вы уменьшили его дважды.
  • y = 3, потому что вы присвоили ему значение x после , оно было уменьшено с 4
  • z = 3, потому что вы присвоили егозначение x до было уменьшено с 3.
3 голосов
/ 08 октября 2010

простое объяснение:

- x или ++ x : значение будет изменено после.

x--или x ++ : значение будет изменено до

Подробное объяснение:

- x или ++ x : pre-decrement / increment: сначала выполнит операцию уменьшения или увеличения, затем назначит x.

x-- или x ++ : post: decment /приращение : сначала присваивается значение x, а затем выполняется операция уменьшения или приращения после.

давайте напишем ваш код в более удобном формате, пошагово рассмотрим ваш код и аннотируем его, чтобы наглядно показать вам, что происходит:

main() {
    //We declare the variables x, y and z, only x is given a value of 4.
    int x=4,y,z;

    //--x will decrement var x by 1 first THEN it will assign the value of x to y.
    //so: x = 3, y = 3 and z = nothing yet.
    y = --x;

    //x-- will assign the value of x to z first, then var x will be decremented by 1 after.
    //so: x = 2, y=3 and z = 3
    z = x--; 

    printf ("\n %d %d %d", x,y,z);

}
3 голосов
/ 08 октября 2010

Вы должны понимать понятия оператора после декремента и пре-декремента.

Оба уменьшат вашу переменную, но один из них вернет исходное значение (x--), а один из них вернет уменьшенное значение (--x).

0 голосов
/ 24 июля 2013

Говоря о том, что означает i=+j; (учитывая, что i = 1 и j = 2)

i=+j; эквивалентно i=i+j;, поэтому ваше выражение становится i=1+2, т. Е. i=3

0 голосов
/ 09 октября 2010
#include<stdio.h>
main ()
{
int x=4,y,z;
y = --x;
z = x--;
printf ("\n %d %d %d", x,y,z);
}

вывод 2,3,3 ................................. первый раз x = 4хорошо.y = - x означает, что значение x уменьшено на 1 и сохранено в y, таким образом, теперь y = 3 и x также равно 3. тогда z = x-- означает, что значение x сохранено в z (z = 3) итогда x уменьшается, т. е. теперь x = 2, но z = 3.Когда вы печатаете значение, printf () печатает 2 3 3

0 голосов
/ 08 октября 2010
  • x ++ / x - называется post увеличение / уменьшение (значение, измененное после ...)
  • ++ x /++ x называется pre увеличение / уменьшение (значение, измененное до ...)

Вот что происходит (примерно) в вашем примере:

int x=4,y,z;  // declare x=4, y=0, z=0
y = --x;      // decrement x then assign it to y (pre decrement) (y=x=3)
z = x--;      // assign x to z then decrement x (post decrement) (z=3 and x=2)
printf ("\n %d %d %d", x,y,z);  // output 2 3 3

Предварительное увеличение / уменьшение выглядит следующим образом в псевдокоде

read value
increment/decrement value
write value
assign value

, а пост-увеличение / уменьшение выглядит следующим образом

read value
assign value
increment/decrement value
write value
0 голосов
/ 08 октября 2010

пусть ** будет оператором увеличения / уменьшения.**e означает применить ** к e и оценить результат , тогда как e** означает оценить e, а затем применить ** к нему .

Ergo, если декремент и оценка разделены, код читается как:

int x=4,y,z;
x-=1;//3
y = x;//3
z = x;//3
x-=1;//2

, который дает вам выходной сигнал;)

0 голосов
/ 08 октября 2010

Если оператор является префиксом, приращение происходит перед присваиванием, если оператор является постфиксом, приращение происходит после присваивания.

0 голосов
/ 08 октября 2010

Да

х = 4
y = предварительное уменьшение x (в основном уменьшение на 1, а затем присвоение, т. е. y = x-1 = 3
х = 3
z = после уменьшения x (уменьшение на 1 после присвоения значения, то есть z = x = 3, затем x = x - 1
х = 2

То есть x = 2, y = 3, z = 3, именно то, что вы видели.

...