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;
}
num1
에1
이 들어있고,++
연산자로 값을 증가시켜주었다.- 따라서
num1
에는2
가 들어있게 된다. - 즉, 변수 자체의 값이 바뀐다.
num1++
을 풀어서 쓰면 다음과 같다.
+=
연산자를 사용해서1
을 증가시켜도++
와 같은 효과를 낼 수 있다.
- 감소 연산은
--
연산자를 사용하며 변수 앞과 뒤에 붙일 수 있다.
#include <stdio.h>
int main()
{
int num1 = 2;
num1--; // 정수형 변수의 값을 1 감소시킴
printf("%d\n", num1); // 1
return 0;
}
num1
에는2
가 들어있고,--
연산자로 값을 감소시켜주었다.- 따라서
num1
에는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
을 증가시키거나, 감소시킨다. - 따라서
b
를1
증가시키면 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--;
를 풀어서 쓰면 다음과 같다.
- 증감 연산자를 변수 뒤에 사용한 것을 후위 연산자라고 하며, 다른 변수에 할당했을 때의 동작 순서는 다음과 같다.
1] 현재 변수의 값이 다른 변수에 할당된다.
2] 증감 연산자가 수행되어 변수의 값이 1
증가(감소)된다.
- 후위 연산자는 할당 이후에 연산을 하게 되므로 바뀌기 전의 값이 다른 변수에 할당된다.
- 즉, 증감 연산자가 변수 뒤에 쓰이면 연산을 나중에 처리한다는 뜻이 된다.
- 이번에는 증감 연산자를 변수 앞에 사용해 보자.
#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;
를 풀어서 쓰면 다음과 같다.
- 증감 연산자를 변수 앞에 사용한 것을 전위 연산자라고 하며, 다른 변수에 할당했을 때의 동작 순서는 다음과 같다.
1] 증감 연산자가 수행되어 변수의 값이 1
증가(감소)된다.
2] 변수의 바뀐 값이 다른 변수에 할당된다.
- 전위 연산자는 할당 전에 연산을 하게 되므로 바뀐 값이 다른 변수에 할당된다.
- 즉, 증감 연산자가 변수 앞에 쓰이면 연산을 먼저 처리한다는 뜻이 된다.
- 변수에 할당하지 않고 함수의 인수로 사용했을 때도 동작 방식은 같다.
- 먼저 변수 뒤에 연산자를 사용해 보자.
#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
함수로 다시 변수의 값을 출력해 보면 같은 값이 표시된다. - 이처럼 증감 연산자는 변수 앞에 오느냐 뒤에 오느냐에 따라 결과가 달라지므로 사용할 때 주의해야 한다.