Channi Studies

[C++] Increment/Decrement Operator (증감연산자) ++, -- 본문

C++/기타

[C++] Increment/Decrement Operator (증감연산자) ++, --

Chan Lee 2023. 12. 7. 12:10

증감 연산자는 대상 값을 1씩 증가 혹은 감소시킵니다.

(variable++: variable = variable + 1)

(variable--: variable = variable - 1)

로 이해하면 좋습니다.

증감 연산자는 정수, 실수, 포인터 변수에서 사용 가능합니다.

 

증감 연산자에는 두가지 notation이 있습니다.

Prefix notation: ++num

Postfix notation: num++

각각 증감 연산을 statement 이전에 적용할 지, statement 실행 이후에 적용할지를 결정합니다.

 

// 증감 연산자 사용 예시

#include <iostream>
using namespace std;

int main(){
    int counter {10};
    
    cout << "Counter: " << counter << endl;
    // Counter: 10
    
    counter = counter + 1;
    cout << "Counter: " << counter << endl;
    // Counter: 11
    
    counter ++;
    cout << "Counter: " << counter << endl;
    // Counter: 12
    
    ++ counter;
    cout << "Counter: " << counter << endl;
    // Counter: 13    
    
    
    return 0;
}

 

 

다음은 prefix notation과 postfix notaiton의 차이를 보여주는 코드입니다.

// prefix notation v.s. postfix notation

#include <iostream>
using namespace std;

int main(){
    int counter {10};
    int result = {0};
    
    cout << "Counter: " << counter << endl;
    // Counter: 10
    
    // prefix notation
    result = ++counter;
    cout << "Counter: " << counter << endl;
    cout << "Result: " << result << endl;
    // Counter: 11
    // Result: 11
    
    // counter & result 값 재정의
    counter = 10;
    result = 0;
    
    // postfix notation
    result = counter++;
    cout << "Counter: " << counter << endl;
    cout << "Result: " << result << endl;
    // Counter: 11
    // Result: 10
    
    return 0;
}

prefix notation의 경우에는 counter 변수값이 우선적으로 변경되고 난 이후, 

statement가 실행되기 때문에, 해당 statment 실행 이후 변수값을 확인 할 시, 

counter과 result 모두 1씩 증가한 모습입니다.

 

반대로 postfix notation에서는 statement가 모두 진행된 이후에 counter 값이 1 증가하기 때문에,

counter은 1 증가했지만, result는 증가하기 이전의 값인 10을 받은 것을 확인할 수 있습니다.

 

 

다른 코드를 한번 보겠습니다.

// prefix notation

#include <iostream>
using namespace std;

int main(){
    int counter = 10;
    int result = 0;
    
    cout << "Counter: " << counter << endl;
    // Counter: 10
    
    // prefix notation
    result = ++counter + 10;
    
    cout << "Counter: " << counter << endl;
    cout << "Result: " << result << endl;
    // Counter: 11
    // Result: 21
    
    
    return 0;
}

이번에도 역시 prefix notation이기 때문에,

result에, (counter + 1) + 10 = 11 + 10 = 21을 저장하게 되고,

counter에는 기존값에 1을 증가한 11이 저장되게 됩니다.

 

 

postfix notation의 경우는 다음과 같습니다.

// postfix notation

#include <iostream>
using namespace std;

int main(){
    int counter = 10;
    int result = 0;
    
    cout << "Counter: " << counter << endl;
    // Counter: 10
    
    result = counter++ + 10;
    
    cout << "Counter: " << counter << endl;
    cout << "Result: " << result << endl;
    // Counter: 11
    // Result: 20
    
    return 0;
}

이번에는 result = counter + 10의 statement 작용 이후에 counter = counter + 1이 적용된다고 이해하면 됩니다.

그렇기 때문에, Counter는 1이 증가하였지만, result에는 증가한 값이 적용되지 못해 기존의 값 10(counter) + 10 = 20이 저장됩니다.

 

 

본문에서는 증가 연산자의 경우에만 작성했지만, 감소 연산자도 정확히 같은 방식으로 적용됩니다.

* 한가지 statement에서 동일한 변수에 대해 2개 이상의 증감 연산자를 사용하지 않도록 주의해야 합니다!