본문 바로가기

프로그래밍 언어들/C

C언어 전위연산 및 후위연산

C언어 전위연산 및 후위연산


1. 증감 연산자

어떤 변수가 가진 값을 1 증가시키거나 1 감소시킬 때, 간단하게 사용할 수 있는 연산자입니다.

앞서 학습한 내용에 의하면, 변수가 가진 값을 변경하려면 아래와 같이 작성해야 합니다.

예) m이 가진 값을 1 증가 시킬 경우, m = m + 1; 이고 m += 1; 이라고 쓸 수도 있습니다.

예) k가 가진 값을 5 감소 시킬 경우,  k = k - 5; 이고 k -= 5; 라고 쓸 수도 있습니다.


int main (void)
{
    int m, n, k;

    m   = 10;
    n   = 10;
    k   = 10;

    m   = m + 1; // m += 1;
    n++;
    k--;
}


위의 소스를 보시면, 앞서 설명한 방법대로 연산한 것과 ++ 또는 --를 이용하여 연산한 것이 있습니다.
이와 같이 ++, --을 증감연산자라고 합니다. 간편하게 변수의 값을 1 증가 시키거나, 1 감소 시킬 때 사용할 수 있습니다.


2. 전위 연산 및 후위 연산

설명에 앞서 아래 예제를 보시길 바랍니다.


  1. int main (void)
  2. {
  3.     int m, n, r;
  4.  
  5.     m   = 10;
  6.     n   = 10;
  7.  
  8.     m ++;
  9.     r   = m;
  10.  
  11.     printf("%d\n", r);
  12.  
  13.     ++ n;
  14.     r   = n;
  15.  
  16.     printf("%d\n", r);
  17. }


위의 예제는 m과 n의 값을 r에 대입한 후 r을 출력하는 예제입니다. 자세히 보시면 변수의 값을 증가시키는

line.8과 line.13 부분이 틀립니다. m은 증감 연산자가 변수 뒤에 있고, n은 증감 연산자가 변수 앞에 있습니다. 이렇게 변수 뒤에 증감 연산자가 있는 것을 후위 연산, 앞에 있는 것을 전위 연산이라고 합니다.

지금 예제코드에서는 m과 n에 10씩 대입하고, 각각 값을 1씩 증가 시킨 후에 r에 대입하고

r을 출력합니다. 즉 둘 다 11을 출력하므로 결과는 동일합니다.


  1. int main (void)
  2. {
  3.     int m, n, r;
  4.  
  5.     m   = 10;
  6.     n   = 10;
  7.  
  8.     r   = m ++;
  9.  
  10.     printf("%d\n", r);
  11.  
  12.     r   = ++ n;
  13.  
  14.     printf("%d\n", r);
  15. }


그렇다면 위의 소스도 결과 값이 같을 까요?
여기서 전위 연산과 후위 연산의 차이가 생깁니다. 이전의 예제는 화면에 11을 두 개 출력하지만,

현재 예제에서는 10과 11을 출력합니다. n의 값이 증가가 안된 것일까요?

출력해 보시면 알겠지만, 두 소스 다 n과 m은 11로 동일합니다.

즉, 전위 연산의 경우 연산을 먼저 수행하고 식을 계산합니다.

후위 연산의 경우 식을 계산하고 연산을 수행합니다.

여기서 식이란 명령어 한 줄(세미콜론(;)을 만나기 전)을 의미합니다.


line.8의 r = m ++;을 해석해 보자면, m을 먼저 r에 대입한 후에 m을 1 증가 시킨다는 의미이고

line.12의 r = ++ n의 경우는, n을 먼저 1 증가 시킨 후에 r에 대입하는 것입니다.


간단한 테스트로, n = 10, m = 5일 때

r = n ++ + -- m; 의 식을 수행한 후에 r의 값은 무엇이 될까요?