독개

#따배씨 4.5 Type Conversion 형변환

by #독개#

암시적형변환 (coersion)

 

사용자가 이데이터 형을 이데이터 형으로 바꿔주세요 라고 명확하게 이야기 하지 않는 경우

 

컴파일에는 문제없으나 상황에따라 다른결과가 나올수있다.

 

int a = 123.0;

이경우 a는 int인데 값은 double을 넣어버렸다.

이럴때 컴파일러는 이정도는 알아서 123.0을 int로 바꿔서 a에 넣어버린것이다.

그런데 문제는 123.2 이런건 값이 달라지지 (int a = 123.3; -> 123출력)

컴파일해준다 컴파일하면 컴파일완료 후 이런 경고메세지가 뜬다

 

https://nanagame2.tistory.com/179

 

#따배씨 2.1 기본 자료형 소개

기본 자료형 소개 Fundamental Data Types (Built in Data Types 등 여러가지 방법으로 부른다) 1byte == 8bit char == 1byte (문자하나) int == 4byte == float 모든 데이터형은 내부적으로 숫자로 변경해서 저장한다 char a

nanagame2.tistory.com

자료형의 크기가 더큰건 암시적 변환해도 아무 상관없으나

 

문제는 자료형이 작은것에서 큰것으로 암시적 변환 할때는 자른다는 것이다.

 

명시적  형변환 (cast)

3가지 방식이 있다

 

 

 

코드

 

/*
형변환(conversion)
암시적형변환(coersion) 컴파일러가 알아서 형변환해준다
명시적형변환(casting)
*/

#include <iostream>
#include <typeinfo>

int main()
{
	using namespace std; 

	/*
	암시적형변환
	컴파일러가 직접 형변환 해주는것 예전에는 다 오류났으나 지금은 똑똑해서 어느정도 해준다
	작은자료형에서 큰자료형으로 암시적변환시는 상관없다 큰집으로 이사가는데 문제안되지
	반대인 경우가 전혀 다른값이 나온다
	*/

	int a = 12345;
	float b = a;
	double c = a;
	float f = 3.84;
	int i = f;
	cout << typeid(a).name() << endl; // a의변수가 어떤형인지 알려준다
	cout << a << endl; // 12345
	cout << b << endl; // 12345
	cout << c << endl; // 12345
	cout << f << endl; // 3.14
	cout << i << endl; // 3            실수를 i로 암시적변환할땐 반올림x 그냥 .뒤를 버린다


	//자료형연산에 우선순위가 존재한다
	// int, unsigned int, long, unsigned long, long long, unsigend long long ,float ,double, long doube
	cout << 5u - 10; //결과값으로 -5가 나와야하는데 엉뚱한 4585886324이런값이 나온다
	//그이유는 5u는 unsigned형인데 뒤의 int보다 우선순위가 높기때문에 결과를 unsigned int로 보낸다 근데 -5는 못들어가니 오류값
	//앞에서 int - double 하면 하나만 실수면 자료형이 실수가 되는거 기억날거다 이게 같은원리다
	//프로그래머들이 이런 실수를 할수 있다

	/*
	명시적 형변환
	프로그래머가 직접 형변환 시켜주는거 2가지스타일이 있다
	*/

	int t = (int)4.0;				//c스타일
	int z = int(4.0);				//c++스타일
	int y = static_cast<int>(4.0);	//최근스타일 이게좋다고 하는사람들도많다 그냥C스타일도좋다
	
}

 

 

 

 


🐱‍👓독하게 개발

블로그의 정보

독한 개발자

#독개#

활동하기