본문 바로가기
개발/C, C++

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

by 77monkey 개발자 2023. 9. 7.
반응형

C/C++에서는 증감 연산자가 있습니다. 지난 시간에 배운 대입 연산자를 통해서 표현할 수도 있지만 증감 연산자를 통해서 1 증감을 표현하는 게 더 자연스럽다고 할까요? 특히 for문에서 증감 연산자를 자주 사용합니다. 증감 연산자에 대해서 알아보도록 합시다. 

 

증감 연산자

증감 연산자는 변수의 값을 증가 또는 감소시키는 데 사용되는 연산자입니다. 증감 연산자는 전위 증감 연산자와 후위 증감 연산자로 나뉘게 됩니다. 

 

전위 증감 연산자

전위 증감 연산자에는 2가지가 있습니다. 변수의 앞에 ++ 또는 --를 붙여서 사용합니다.

  • 전위 증가 연산자: 변수의 값을 1 증가시킨 뒤 변수를 사용함 ex) ++val;
  • 전위 감소 연산자: 변수의 값을 1 감소시킨 뒤 변수를 사용함 ex) --val;

전위 증감 연산자 예시

먼저 사용하는 코드를 살펴보도록 하겠습니다. 

#include <stdio.h>

int main() {

	int preplus = 0;
	int preminus = 0;

	++preplus; //전위 증가 연산자
	--preminus; //전위 감소 연산자

	printf("preplus: %d preminus: %d\n", preplus, preminus);

	return 0;
}

이 경우에 preplus는 1이 출력되고, preminus는 -1이 출력됩니다.

하지만 이렇게 사용하는 경우보다 조건문에서 사용하는 경우가 많습니다. 

#include <stdio.h>

int main() {

	int var = 0;

	if (++var) {
		printf("var is not zero\n");
	}

	return 0;
}

이 경우에는 var is not zero라는 문구를 출력하게 됩니다. 유사한 예제를 아래 후위 증감 연산자를 확인한 뒤 확인해 봅시다. 결과가 달라지는 것을 비교할 수 있습니다.

 

후위 증감 연산자

후위 증감 연산자에는 2가지가 있습니다. 변수의 뒤에 ++ 또는 --를 붙여서 사용합니다. 

  • 후위 증가 연산자: 변수를 사용한 뒤 변수의 값을 1 증가시킴 ex) val++;
  • 후위 감소 연산자: 변수를 사용한 뒤 변수의 값을 1 감소시킴 ex) val--;

 

후위 증감 연산자 예시

후위 증감 연산자는 아래와 같이 사용합니다. 결과는 전위 증감 연산자에서 보았듯이, 1과 -1을 출력합니다. 

#include <stdio.h>

int main() {
	int postplus = 0;
	int postminus = 0;

	postplus++; //후위 증가 연산자
	postminus--; //후위 감소 연산자

	printf("postplus: %d postminus: %d\n", postplus, postminus);

	return 0;
}

결과가 달라지지 않은 이유는 단인 라인으로 코드가 있기 때문입니다. 즉 조건문에 들어가면 조금 다른 결과를 볼 수 있습니다.

#include <stdio.h>

int main() {

	int var = 0;

	if (var++) {
		printf("var is not zero\n");
	}

	return 0;
}

이 경우에는 아무 것도 출력하지 않습니다. 즉 전위 증감 연산자에서 봤던 것은 ++을 했기 때문에 0에서 1로 증가된 후 조건문이 참이 되어서 printf를 출력했습니다. 하지만 후위 증감 연산자에서는 var이 0인 상태에서 if문이 false가 되고 이후 1로 증가가 됩니다. 그렇기 때문에 var is not zero를 출력할 수 없습니다. 이 부분이 처음에 코딩을 할 때 헷갈릴 수 있는 부분인데 잘 이해하시길 바랍니다. 

 

증감 연산자 사용시 주의사항

증감 연산자를 사용할 때에는 주의사항이 있습니다. 함수를 호출할 때 증감 연산자를 사용한 변수를 사용하면 안 됩니다. 왜냐하면 결과가 사용하는 시스템에 따라서 달라질 수 있는 undefined 이기 때문입니다. 

예를 들면 아래와 같은 코드가 undefined 한 경우입니다. 

#include <stdio.h>

int main() {
	int var = 1;

	printf("var: %d --var:%d\n", var, --var);

	return 0;
}

결과가 var: 1 --var:0이 나올 것을 예상했지만 결과는 다릅니다. var: 0 --var:0이 나옵니다. 즉, 예상한 것과 다르게 나옵니다. 그렇기 때문에 안전하게 사용하기 위해서는 아래와 같이 코드를 사용하셔야 합니다. 

#include <stdio.h>

int main() {
	int var = 1;

	printf("var: %d ", var);
	printf("--var: %d\n", --var);

	return 0;
}

그러면  var: 1 --var:0이 결과로 나오게 됩니다.

 

마무리

마무리를 하기 전에 그전부터 자주 써서 잊고 있었던 for문에서의 증감 연산자를 알아보도록 하겠습니다. for문에서는 아래 코드에서처럼 ++i를 하거나 i++를 하거나 큰 차이가 없습니다. 왜냐하면 해당 부분에서 i라는 변수가 계산에 들어가지 않기 때문입니다. 선호에 따라서 ++i를 사용하시거나 i++를 사용하시면 됩니다. 

#include <stdio.h>

int main() {

	int i;
	for (i = 0; i < 3; i++) printf("%d\n", i);

	return 0;
}

증감 연산자는 사실 어려울 게 없습니다. 하지만 undefined 상황을 만들지 않고 한 줄 더 할애해서 코드를 짜는 습관을 가지시면 좋습니다. 증감 연사자 이제 자유롭게 사용해 봅시다.

반응형

'개발 > C, C++' 카테고리의 다른 글

[C/C++] 논리 연산자  (0) 2023.09.09
[C/C++] 관계 연산자  (0) 2023.09.08
[C/C++] 대입 연산자  (0) 2023.09.06
[C/C++] 산술 연산자  (0) 2023.09.05
[c/c++] 2차원 배열, N차원 배열  (0) 2023.08.30