전위증가(감소), 후위증가(감소)

1 minute read

a++ 과 ++a 두가지의 차이점이 무엇일까요?

말로 간단히 표현하면

첫 번째는 선연산 후증가, 두 번째는 선증가 후연산이라고 할 수 있어요.

예를 들어, 다음과 같은 코드를 살펴봅시다.

#include <stdio.h>

int main()
{
    int s1, a1 = 1;
    int s2, a2 = 1;

    s1 = ++a1; // 선증가 후연산
    s2 = a2++; // 선연산 후증가

    printf("s1:%d \ns2:%d \n",s1, s2);
    printf("#######\n");
    printf("a1:%d \na2:%d \n", a1, a2);

    return 0;
}

실행결과1

  • s1의 경우 ++a1에 의해 a1의 값이 먼저 1만큼 증가하고 s1이 초기화되었다는 것을 알 수 있고,

  • s2의 경우 a2++에 의해 1이 먼저 초기화되고 a2의 값이 1만큼 증가했다는 것을 알 수 있어요.

전위증가와 후위증가의 개념은 이해하셨을거라 생각하고,

조금 더 복잡한 코드를 살펴봅시다.

#include <stdio.h>

int main()
{
    int a = 1, b = 2;
    int s1, s2, s3;
    
    s1 = --a + --b + a-- + b++; 
    s2 = ++a + --a + a++ + b-- + --b; 
    s3 = --a + --b + --a - b++ - a; 

    printf("s1:%d \ns2:%d \ns3:%d \n", s1, s2, s3);
    printf("#########\n");
    printf("a:%d \nb:%d \n", a, b);
    
    return 0;
}

실행결과2

앞에서 언급한 전위증가와 후위증가의 개념을 적용하여 전위증가는 선증가 후연산, 후위증가는 선연산 후증가임을 다시 한번 상기하고 문장을 살펴봅시다.

처음엔 a=1, b=2 로 초기화되어 있습니다.

먼저, s1에서 연산 이전에 변수a,b의 선증가(감소)가 일어납니다. 따라서, a=0, b=1 이고 8행에서는 다음과 같이 연산이 됩니다.

s1 = 0 + 1 + 0 + 1 = 2

그 다음은 후증가(감소)가 일어나야 하겠죠?

따라서, 다음 행으로 넘어갈 때 최종적으로 a = -1, b=2 인 상태가 됩니다.

다음, s2를 살펴봅시다.

s1과 마찬가지로 변수a,b의 선증가(감소) 이후 연산, 그리고 후증가(감소)의 순서로 진행됩니다.

따라서, a=-1, b=1

s2= (-1) + (-1) + (-1) + 1 + 1 = -1 이고

다음 행으로 넘어갈 때 최종적으로 a = 0, b=0 인 상태가 됩니다.

마지막으로 s3입니다.

앞서 언급한 내용들을 바탕으로 a=-2, b=-1

s3 = (-2) + (-1) + (-2) - (-1) - (-2) = -2 이고

다음 행으로 넘어갈 때 최종적으로 a=-2, b=0 인 상태가 됩니다.

Categories:

Updated:

Leave a comment