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

[C/C++] 캐스팅 연산자

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

개발을 하다 보면 캐스팅 연산자를 사용할 때가 생각보다 많습니다. 함수 호출을 하기 위해서 인자 값으로 값을 줄 때 캐스팅을 해서 주는 경우도 자주 있습니다. 캐스팅 연산자에 대해서 알아보도록 합시다. 

 

캐스팅 연산자

캐스팅 연산자는 데이터 형식을 다른 데이터 형식으로 변환하는 데 사용됩니다. 캐스팅 연산자에는 2가지가 있는데 바로 명시적 캐스팅과 암시적 캐스팅입니다. 

 

명시적 캐스팅

명시적 캐스팅은 명시적으로 데이터 형식을 변환하고자 할 때 사용됩니다. 명시적으로 타입을 변환하는 것이기 때문에 개발자가 인지하고 있습니다. 

(데이터 타입)변수

아래는 간단한 코드인데, 사칙연산 등을 할 때에는 타입을 맞춰주는 것이 좋습니다. 그렇지 않으면 의도한 결과가 나오지 않을 수 있기 때문입니다.

#include <stdio.h>

int main() {

	int intv = 1;
	float floatv = 1.01;

	if (floatv > (float)intv)
		printf("%f is bigger\n", floatv);
	
	return 0;
}

결과는 예상하신대로 "1.01 is bigger"이 출력됩니다.

 

암시적 캐스팅

암시적 캐스팅은 데이터 형식 간에 자동으로 형 변환되는 것을 의미합니다. 따라서 언제 타입이 변환되는지 개발자가 다 인지할 수 없습니다. 보통 선언할 때 정수는 int, 실수는 double로 처리가 됩니다.

#include <stdio.h>

int main() {

	int sum = 0;
	
	sum = 77 + 77.4;

	printf("sum is %d\n", sum);
		
	return 0;
}

sum이 정수인데 정수와 실수의 연산이 sum에 대입이 됩니다. 이때 암시적 캐스팅이 2번 일어나게 됩니다. 먼저 77 + 77.4 연산을 하게 될 때 타입이 맞지 않기 때문에 연산이 한 번 발생합니다. 이때에는 더 큰 타입인 double형으로 암시적 캐스팅이 발생합니다. 그 후 sum에 대입할 때 sum은 int 타입이기 때문에 또 한 번의 암시적 캐스팅이 이루어집니다. 그래서 int 타입으로 암시적 캐스팅이 발생하여 154가 sum에 대입되게 됩니다. 

결과적으로는 "sum is 154"가 출력되게 됩니다.

명시적 타입으로 바꿔서 확인해 보겠습니다. 글로 설명하는 것보다 암시적 캐스팅한 부분이 눈에 확 들어오시죠? 

#include <stdio.h>

int main() {

	int sum = 0;
	
	sum = (int)((double)77 + 77.4);

	printf("sum is %d\n", sum);
		
	return 0;
}

 

마무리

캐스팅 연산자에 대해서 알아보았는데 어떠셨나요? 간단한 것 같으면서도 생각보다 신경써야할 부분이 좀 있습니다. 암시적 캐스팅이 발생하지 않도록 주의하시면서 개발하시길 바랍니다. 

 

반응형

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

[C/C++] 함수(function)  (0) 2024.05.02
[C/C++] 연산자 우선순위  (0) 2023.09.18
[C/C++] sizeof 연산자  (0) 2023.09.15
[C/C++] 쉼표 연산자(,)  (0) 2023.09.14
[C/C++] 삼항 조건 연산자(삼항 연산자)  (0) 2023.09.13