Skip to content

8. 증가, 감소 연산자


1. 키워드

  • 증가 연산자와 감소 연산자
  • 전위(Prefix) 연산자와 후위(Postfix) 연산자


2. 증가, 감소 연산자 사용하기

  • C에서는 ++, --라는 연산자를 제공한다.
  • ++는 값을 1 증가시키는 증가 연산자이고, --는 값을 1 감소시키는 감소 연산자이며 줄여서 증감 연산자라고도 한다.


3. 변수의 값을 1 증가, 감소시키기


  • 증가 연산은 ++ 연산자를 사용하며 변수 앞과 뒤에 붙일 수 있다.


#include <stdio.h>

int main()
{
    int num1 = 1;

    num1++; // 정수형 변수의 값을 1 증가시킴

    printf("%d\n", num1); // 2

    return 0;
}


  • num11이 들어있고, ++ 연산자로 값을 증가시켜주었다.
  • 따라서 num1에는 2가 들어있게 된다.
  • 즉, 변수 자체의 값이 바뀐다.


  • num1++을 풀어서 쓰면 다음과 같다.


num1 = num1 + 1;


  • += 연산자를 사용해서 1을 증가시켜도 ++와 같은 효과를 낼 수 있다.


num1 += 1;


  • 감소 연산은 -- 연산자를 사용하며 변수 앞과 뒤에 붙일 수 있다.


#include <stdio.h>

int main()
{
    int num1 = 2;

    num1--; // 정수형 변수의 값을 1 감소시킴

    printf("%d\n", num1); // 1

    return 0;
}


  • num1에는 2가 들어있고, -- 연산자로 값을 감소시켜주었다.
  • 따라서 num1에는 1이 들어있게 된다.
  • 마찬가지로 변수 자체의 값이 바뀐다.


  • num1--;을 풀어서 쓰면 다음과 같다.


num1 = num1 - 1;


  • -= 연산자를 사용해서 1을 감소시켜도 --와 같은 효과를 낼 수 있다.


num1 -= 1;


4. 실수 자료형에 증감 연산자 사용하기

  • 실수 자료형에 증감 연산자를 사용해 보자.


#include <stdio.h>

int main()
{
    float num1 = 2.1f;
    float num2 = 2.1f;

    num1++; // 실수형 변수의 값을 1 증가시킴
    num2--; // 실수형 변수의 값을 1 감소시킴

    printf("%f %f\n", num1, num2); // 3.100000 1.100000

    return 0;
}


  • 실수에서도 ++, -- 연산자를 사용할 수 있으며, 1을 증가시키거나 감소시킨다.
  • 즉, 2.1에서 1을 증가시켰으므로 3.1로 바뀌고, 2.1에서 1을 감소시켰으므로 1.1로 바뀐다.
  • 따라서 정수 부분만 바뀌며 소수점 이하 자리에는 영향을 미치지 않는다.


5. 문자 자료형에 증감 연산자 사용하기

  • 문자 자료형도 증감 연산자를 사용할 수 있다.


#include <stdio.h>

int main()
{
    char c1 = 'b';
    char c2 = 'b';

    c1++; // 문자 자료형 변수의 값을 1 증가시킴, 'c'로 바뀜
    c2--; // 문자 자료형 변수의 값을 1 감소시킴, 'a'로 바뀜

    printf("%c %c\n", c1, c2); // c a

    return 0;
}


  • 알파벳 소문자 b가 들어있는 변수에 ++, -- 연산자를 사용했다.
  • 문자 자료형도 실제로는 정수이므로 증감 연산자를 사용하면 1을 증가시키거나, 감소시킨다.
  • 따라서 b1 증가시키면 ASCII 코드대로 c가 되고, 1 감소시키면 a가 된다.


6. 증감 연산자의 위치에 따른 차이점 알아보기

  • 증감 연산자는 변수 앞에 사용할 수도 있고 뒤에 사용할 수도 있다.
  • 여기서 증감 연산자만 단독으로 사용했을 때는 큰 차이가 없지만, 연산자를 사용한 뒤 다른 변수에 할당할 때는 위치에 따라 큰 차이가 있다.


  • 먼저 증감 연산자를 변수 뒤에 사용했을 때이다.


#include <stdio.h>

int main()
{
    int num1 = 2;
    int num2 = 2;
    int num3;
    int num4;

    num3 = num1++; // num1의 값을 num3에 할당한 뒤 num1의 값을 1 증가시킴
    num4 = num2--; // num2의 값을 num4에 할당한 뒤 num2의 값을 1 감소시킴

    printf("%d %d\n", num3, num4); // 2 2

    return 0;
}


  • 2가 들어있는 num1, num2 뒤에 ++, -- 연산자를 사용한 다음 다른 변수에 할당했다.
  • 그런데 printf로 값을 출력해 보면 값이 바뀌지 않고 2가 출력된다.


  • num3 = num1++;num4 = num2--;를 풀어서 쓰면 다음과 같다.


num3 = num1;
num1 = num1 + 1;

num4 = num2;
num2 = num2 - 1;


  • 증감 연산자를 변수 뒤에 사용한 것을 후위 연산자라고 하며, 다른 변수에 할당했을 때의 동작 순서는 다음과 같다.


1] 현재 변수의 값이 다른 변수에 할당된다.

2] 증감 연산자가 수행되어 변수의 값이 1 증가(감소)된다.


001


  • 후위 연산자는 할당 이후에 연산을 하게 되므로 바뀌기 전의 값이 다른 변수에 할당된다.
  • 즉, 증감 연산자가 변수 뒤에 쓰이면 연산을 나중에 처리한다는 뜻이 된다.


  • 이번에는 증감 연산자를 변수 앞에 사용해 보자.


#include <stdio.h>

int main()
{
    int num1 = 2;
    int num2 = 2;
    int num3;
    int num4;

    num3 = ++num1; // num1의 값을 1 증가시킨 뒤 num3에 할당
    num4 = --num2; // num2의 값을 1 감소시킨 뒤 num4에 할당

    printf("%d %d\n", num3, num4); // 3 1

    return 0;
}


  • 2가 들어있는 num1, num2 앞에 ++, -- 연산자를 사용한 다음 다른 변수에 할당했다.
  • 그리고 printf로 값을 출력해 보면 증감 연산자가 동작하여 3, 1이 출력된다.


  • num3 = ++num1;num4 = --num2;를 풀어서 쓰면 다음과 같다.


num1 = num1 + 1;
num3 = num1;

num2 = num2 - 1;
num4 = num2;


  • 증감 연산자를 변수 앞에 사용한 것을 전위 연산자라고 하며, 다른 변수에 할당했을 때의 동작 순서는 다음과 같다.


1] 증감 연산자가 수행되어 변수의 값이 1 증가(감소)된다.

2] 변수의 바뀐 값이 다른 변수에 할당된다.


002


  • 전위 연산자는 할당 전에 연산을 하게 되므로 바뀐 값이 다른 변수에 할당된다.
  • 즉, 증감 연산자가 변수 앞에 쓰이면 연산을 먼저 처리한다는 뜻이 된다.


  • 변수에 할당하지 않고 함수의 인수로 사용했을 때도 동작 방식은 같다.
  • 먼저 변수 뒤에 연산자를 사용해 보자.


#include <stdio.h>

int main()
{
    int num1 = 2;
    int num2 = 2;

    printf("%d %d\n", num1++, num2--); // num1, num2의 값을 먼저 출력한 뒤 증감 연산자 동작
    printf("%d %d\n", num1, num2);     // 증감 연산자가 동작한 결과

    return 0;
}

// 2 2
// 3 1


  • printf 함수 안에서 변수 뒤에 증감 연산자를 사용하면 바뀌기 전의 값이 먼저 출력된 다음에 연산자가 동작하여 값이 바뀐다.
  • 그러므로 printf 함수로 다시 변수의 값을 출력해 보면 바뀐 값이 표시된다.


  • 이번에는 변수 앞에 연산자를 사용해 보자.


#include <stdio.h>

int main()
{
    int num1 = 2;
    int num2 = 2;

    printf("%d %d\n", ++num1, --num2); // 증감 연산자가 먼저 동작한 뒤 num1, num2의 값을 출력
    printf("%d %d\n", num1, num2);     // 앞과 같은 값이 출력됨

    return 0;
}

// 3 1
// 3 1


  • printf 함수 안에서 변수 앞에 증감 연산자를 사용하면 연산자가 먼저 동작하여 바뀐 값이 출력된다.
  • 그러므로 printf 함수로 다시 변수의 값을 출력해 보면 같은 값이 표시된다.
  • 이처럼 증감 연산자는 변수 앞에 오느냐 뒤에 오느냐에 따라 결과가 달라지므로 사용할 때 주의해야 한다.

References