📚자료형 변환

컴퓨터에서 자료형이 같지 않으면 계산을 하거나 값을 올바르게 전달할 수 없습니다. 따라서 서로 다른 자료형의 값들이 한 수식에 섞여 있다면 반드시 같은 형으로 자료형을 변환해줘야 합니다.

형 변환에는 컴파일러에 의해 자동으로 이뤄지는 묵시적 형 변환과 프로그래머가 의도적으로 형 변환을 지시하는 명시적 형 변환이 있습니다.

자료형을 변환하면 원래 값을 그대로 유지하지 못하는 경우가 있으므로 주의해야 합니다.


📄묵시적 형 변환

자료형에는 형 변환 우선 순위가 있습니다. 정수형 자료형의 변환 순위는 아래와 같습니다.

bool -> char -> short int -> int -> long int -> long long int

실수형 자료형의 변환 순위는 다음과 같습니다.

float -> double -> long double

컴파일러가 자동으로 수행하는 형 변환은 언제나 데이터 손실이 최소화되는 방향으로 이뤄집니다.

따라서 묵시적 형 변환을 할 때 순위가 낮은 자료형의 값이 순위가 높은 자료형의 값으로 변환됩니다.

그리고 형 변환은 수식에 있는 가장 높은 순위의 자료형으로 한꺼번에 변환되는 것이 아니고 연산자 단위로 필요한 변환이 이뤄집니다.



📄명시적 형 변환

명시적 형 변환은 프로그래머가 명시적으로 자료형 변환을 지정해 주는 것을 의미합니다. C 에서의 변환 방법을 사용할 수 있지만 C++ 에서는 형 변환 연산자를 제공합니다.

  • static_cast: 컴파일 할 때 지정된 자료형으로 변환.

  • dynamic_cast: 기반 클래스와 파생 클래스 간의 포인터 또는 참조의 형 변환이 프로그램이 실행되는 동안 일어나도록 지시.

  • reinterpret_cast: 주어진 값의 내용과는 관계없이 bit 수준에서 자료형 변환. static_cast로 할 수 없는 변환도 허용.

  • const_cast: const로 선언된 객체의 const 한정어 해제


명시적 형 변환 연산자를 사용하는 것은 형 변환을 보다 엄격하게 통제함으로써 오류를 방지하는 역할을 할 수 있습니다.

C 에서 형 변환

1
2
int a = 1, b = 2;
float ans = (float)a / b;


C++ 에서 형 변환

1
2
int a = 1, b = 2;
float ans = static_cast<float>(a) / b;



Leave a comment