Постинкрементный и преинкрементный оператор

Пожалуйста, объясните мне результат этого кода.

// кодируем a, когда я запускаю этот код на своем ноутбуке, значение y равно 4. И я думаю, что логически значение y должно быть 5, потому что при выполнении x ++ оно должно возвращать 2 без приращения, как после увеличения, а затем, когда мы добавляем х, который теперь содержит увеличенное значение, то есть 3. Таким образом, 2 + 3 равно 5, по моему мнению. Но согласно моему turbo C++ 3.0 ответ - 4.

#include <stdio.h>

void main()

{

    int x = 2,y;

    **int y = x++ + x;**         // ans 4

    printf("y is :%d", y);
}

// код B Когда я запускаю этот код, отвечаю 6. Здесь turbo C++ 3.0 в ++x собирает увеличенное значение x++, которое противоположно приведенному выше коду. Логически здесь ответ правильный, но в приведенном выше коде его нет. #включают

void main()

{

    int x = 2,y;

    **int y = x++ + ++x;**       //and 6

    printf("y is :%d", y);
}

2 ответа

Во-первых, оператор присваивания, который является = работает справа налево, что означает, что если вы пишете x = 2 + 4 + 1; ваш компилятор начинает читать его с самой правой цифры 1 тогда добавь 4 к нему и так далее, а затем он присваивает это значение x,

Итак, в вашем случае заявление y = x++ + x; компилятор начинает видеть это справа, то есть сначала видит x т.е. 2 а потом видит x++ т.е. также 2 как это оператор постинкрементного, наконец, он добавляет их и назначает y как 2 + 2 то есть 4,

Во втором случае это y = x++ + ++x;компилятор сначала смотрит на ++x и так как это предварительный оператор приращения, он увеличивается x с одним, т.е. x сейчас 3, После этого x++ видно и как указано выше, потому что это почтовый оператор, он будет рассматриваться как x в этой операции, и это значение 3 (помните, мы увеличили x на один ранее) и, следовательно, компилятор присваивает 3 + 3 т.е. 6 в y,

  1. Первая программа, где результат 4

    #include <stdio.h>
    
    void main()   {
     int x = 2,y;
     **int y = x++ + x;         // x=2, so y=2+2=4
     printf("y is :%d", y); // after post increment x=3
    }
    

Поскольку переменная получает его только после увеличения значения только после завершения выполнения оператора, поэтому y=2+2

  1. Вторая программа, где результат 6.

    Ассоциативность оператора ++ "справа налево"

    void main()   {
       int x = 2,y;
       **int y = x++ + ++x;   //Since associativity is left to right so y=3+3=6
       printf("y is :%d", y);// after the post increment x=4
    }
    

Здесь предварительное увеличение выполняется первым, так как из-за правила ассоциативности, поэтому y=3+3

Другие вопросы по тегам