전위증가(감소), 후위증가(감소)
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 인 상태가 됩니다.
Leave a comment