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개 μ΄μƒμ˜ 증감 μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€!