증감연산자 전위, 후위 (++n, n++) 차이점 쉽게 이해하기
증감연산자
프로그램에서 변수값을 1 증가시키거나 1 감소시키는 상황은 매우 빈번하다.
이런 상황에서 자주 쓰이는 연산자가 바로 증감연산자다.
증감연산자는 증가연산자(++)와 감소연산자(--)로 나뉜다.
증가연산자는 변수값을 1 증가시키고 감소연산자는 변수값을 1 감소시킨다.
또한 증감연산자는 전위(++n)와 후위(n++)로 나뉜다.
전위나 후위나 증감연산자가 사용된 후의 n을 출력하면 1이 증가된 값을 갖게된다.
즉 n++ 이나 ++n 이나 n=n+1 과 n+=1 같은 기능을 수행한다는 것이다.
int a = 1, b = 1, c = 1, d = 1;
++a;
b++;
c = c + 1;
d += 1;
printf("출력값: %d, %d, %d, %d\n", a, b, c, d);
/* 다음의 결과값은 모두 2다.
출력값: 2, 2, 2, 2 */
여기까지는 이해하기 쉬운데 모두 알다시피 증감연산자가 전위냐 후위냐에 따라서
'연산결과값'이 달라지고 헷갈리기 시작한다. 일단 용어들부터 정의해보도록 하자.
전위 (++n)
연산자 ++가 피연산자 n보다 앞에 위치할 때를 전위라 하고 1증가된 값이 연산결과값이다.
후위 (n++)
반대로 연산자 ++가 피연산자 n보다 뒤에 위치할 때를 후위라 하고 1증가하기 전 값이 연산결과값이다.
그렇다면 연산결과값이 뭘까, 간단히 말해 '증감연산 그 자체의 값' 이다.
다시말해 'n++이나 ++n' 그 자체의 결과값을 말한다.
n++이나 ++n 이라는 연산을 실행한 뒤 n을 출력한다면 위에서 보았듯이 n은 1이 증가된 값을 보인다.
그렇다면 n++, ++n 그 자체를 출력한다면 뭐가나올까?
이것이 '연산결과값'에 대해 이해할 수 있는 좋은 방법이라 생각한다.
int a = 1, b = 1;
printf("출력값: %d, %d \n", ++a, b++);
/* 출력값: 2, 1 */
전위인 경우 1증가된 후의 값인 2가 나왔고, 후위인 경우 1증가되기 전의 값인 1이 나왔다.
다시말해 서로 다른 '연산결과값'이 나왔으며 이것이 전위와 후위의 차이점이다.
위의 내용을 그림으로 표현하면 다음과 같다.
전위일 때와 후위일 때, 연산결과값은 서로 다르지만 연산이 끝난 후 n의 값은 둘 다 11로 같다는 것 또한 잊지말자.
나는 이 그림을 그려서 전위와 후위를 구별했으며, 헷갈릴때마다 이걸 그려서 문제를 해결한다.
전위, 후위를 구별하는 문제도 이거면 가뿐하다.
실제로 프로그래밍 기말고사에서도 이 그림을 이용해서 전위, 후위 연산결과값을 구했다.
다음은 증감연산자에 대해서 잘 이해했는지 테스트할 수 있는 간단한 예제다.
증감연산자의 원리에 대해서 정확히 알고 있다면 출력결과를 문제없이 구할 수 있을 것이다.
#include <stdio.h>
int main(void)
{
int m = 10, n = 5;
int result;
result = m++ + --n;
printf("m = %d, n = %d, result = %d \n", m, n, result);
result = ++m - n--;
printf("m = %d, n = %d, result = %d \n", m, n, result);
return 0;
}
계산이 뭔가 이상하다면 이상한게 맞다, 이건 수학문제가 아니라 증감연산자를 구별할 수 있느냐 묻는 문제이니깐 !