(C++) 4.4 형변환 Type conversion

이준우·2021년 10월 16일
0
post-custom-banner

우리가 프로그램을 만들때에 형변환을 하는 경우도 생기는데, 그에 대해 자세히 알아보자.

1. typeinfo

#include<iostream>
#include<typeinfo>

int main()
{
	using namespace std;

	int a = 123;
	cout << typeid(a).name() << endl;

	return 0;

}

output : int

근데 여기서 좀 의아한 것이 있다. user가 자신 마음대로 자료형을 선언하였는데, 특정 변수의 자료형을 모르는 것에 대해서 말이다.

2. 암시적, 명시적 형변환

우선 암시적 형변환에 대해 알아보자. 암시적 형변환은 compiler가 알아서 형변환시키는 것을 말한다.

#include<iostream>
#include<typeinfo>

int main()
{
	using namespace std;

	int a = 123.2;
	cout << typeid(a).name() << endl;
	cout << a << endl;
	return 0;

}

ouput : int
	123

123.2같은 경우에는 double형이여서 오류가 나야하지만 오류없이 출력되는 것을 볼 수 있다. 따라서 compiler가 자동적으로 판단하여 int형으로 출력하는 것이다.

그럼 명시적 형변환이란 무엇일까? user가 바꿔주는 것을 말한다.

#include<iostream>
#include<typeinfo>

int main()
{
	using namespace std;

	// numeric conversion
	double i = 10000;
	char s = i;

	// numeric promotion
	int a = 10.f;   
	double d = a;   

	
	cout << static_cast<int>(s) << endl;
	cout << (int)s << endl;

	cout << static_cast<int>(d) << endl;
	cout << (int)d << endl;

	return 0;

}

output : 16
	 16
     	 10
         10

작은 방에서 큰방으로 값을 옮길때에는 별 문제없이 값이 제대로 출력되는데, 큰방에서 작은방으로 값을 옮기면 문제가 생긴다.

형변환에도 우선순위가 있다. int보다 unsigned int가 우선순위가 높으므로 둘을 계산하면 값은 unsigned int로 계산된다.

형변환 우선순위
int -> unsigned int -> long -> unsigned long -> long long -> unsigned long long -> float -> double -> long double

profile
꿈꾸는 CV
post-custom-banner

0개의 댓글