A. 자료형 변환(type conversion)
1. 자료형 변환
a. 자료형 변환이란?
하나의 자료형을 다른 자료형으로 바꾸는 행위
b. C++의 자동 타입 변환
C++에서는 다음 두 가지 경우 자동으로 타입 변환을 함
1) 다른 타입끼리의 대입, 산술 연산 시
2) 함수에 인수를 전달할 때
c. 자료형 변환의 유의점
표현 범위가 좁은 자료형 ➡ 표현 범위가 더 넓은 자료형으로의 타입 변환 👍
💥 반대의 경우에서는 자료형 변환에서는 데이터의 손실이 남
d. 자료형 변환의 종류
1) 묵시적 타입 변환(자동 타입 변환)
2) 명시적 타입 변환(강제 타입 변환)
2. 묵시적 타입 변환(자동 타입 변환, implicit type conversion)
a. 묵시적 타입 변환이란?
🌟 대입 연산이나 산술 연산에서 컴파일러가 자동으로 실행해주는 타입 변환
C와 다르게 C++에서는 대입 연산 시 연산자의 오른쪽에 존재하는 데이터의 타입이 연산자의 왼쪽에 존재하는 데이터의 타입으로 묵시적 타입 변환이 진행
b. 변환 방법
1) 대입연산 : 오른쪽에서 왼쪽 타입으로 변환
2) 산술연산 : 데이터의 손실이 최소화 되는 방향으로 변환
산술 연산에 대한 결괏값의 타입은 피연산자의 타입과 언제나 일치
💥 즉 int형 데이터끼리의 산술 연산에 대한 결괏값은 언제나 int형 데이터
c. 변환 순서
char 형 → short 형 → int 형 → long 형 → float 형 → double 형 → long double 형
즉, 점점 더 큰 방향으로 (데이터 손실이 최소화 되는 방향) 변환된다
💙 bool형 데이터의 자동 타입 변환
true : 1 / false : 0으로 자동 변환
d. 변환 예제
1) 대입 연산
🤓 예제 : 대입 연산에서 일어나는 묵시적 타입 변환
#include <iostream>
using namespace std;
int main(void)
{
int num1 = 3.1415;
int num2 = 8.3E12;
double num3 = 5;
cout << "num1에 저장된 값은 " << num1 << "입니다." << endl;
cout << "num2에 저장된 값은 " << num2 << "입니다." << endl;
cout << "num3에 저장된 값은 " << num3 << "입니다.";
return 0;
}
✨ 실행결과
num1에 저장된 값은 3입니다. //int in 실수 = 소수 부분이 자동으로 삭제 (데이터 손실 ⭕)
num2에 저장된 값은 2147483647입니다. //표현할 수 있는 범위 ⬆ 데이터라 값 변경 (데이터 손실 ⭕)
num3에 저장된 값은 5입니다. //double ➡ int = double (데이터 손실 ❌)
2) 산술 연산
🤓 예제 : 산술 연산에서 일어나는 묵시적 타입 변환
#include <iostream>
using namespace std;
int main(void)
{
double result1 = 5 + 3.14;
double result2 = 5.0f + 3.14;
cout << "result1에 저장된 값은 " << result1 << "입니다." << endl;
cout << "result2에 저장된 값은 " << result2 << "입니다.";
return 0;
}
✨ 실행결과
result01에 저장된 값은 8.140000입니다. //int ➕ double = double (double에 저장해 데이터 손실 ❌)
result02에 저장된 값은 8.140000입니다. //float ➕ double = double (double에 저장해 데이터 손실 ❌)
3. 명시적 타입 변환(강제 타입 변환, explicit type conversion)
a. 명시적 타입 변환이란?
🌟 사용자가 타입 캐스트(type cast) 연산자를 사용하여 강제적으로 수행하는 타입 변환
b. 2가지 타입 변환 방법
📘 문법
1. (변환할타입) 변환할데이터 // C언어와 C++ 둘 다 사용 가능
2. 변환할타입 (변환할데이터) // C++에서만 사용 가능
1번은 변환하고자 하는 데이터의 앞에 괄호(()) 즉, 타입 캐스트(type cast) 연산자를 추가하고 그 안에 변환할 타입 명시
그냥 네이밍 한다고 생각하면 됨 ex) (소년) 명수
c. 변환 예제
🤓 예제 : 명시적 타입 변환
#include <iostream>
using namespace std;
int main(void)
{
int num1 = 1;
int num2 = 4;
double result1 = num1 / num2;
double result2 = (double) num1 / num2;
double result3 = double (num1) / num2;
cout << "result1에 저장된 값은 " << result1 << "입니다." << endl;
cout << "result2에 저장된 값은 " << result2 << "입니다." << endl;
cout << "result3에 저장된 값은 " << result3 << "입니다.";
return 0;
}
✨ 실행결과
//산술 연산 법칙에 따라 결과값이 int형이기 때문에 0으로 출력 (only 산술연산)
result1에 저장된 값은 0입니다.
//두개 중 하나를 double로 변환했기 때문에 double값을 얻을 수 있음 (명시 + 산술연산)
result2에 저장된 값은 0.25입니다.
//C++에서만 사용할 수 있는 명시적 타입 변환 스타일의 사용법
result3에 저장된 값은 0.25입니다.
출처 : http://www.tcpschool.com/cpp/cpp_datatype_typeConversion
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 연산자 총정리 (0) | 2023.09.05 |
---|---|
[게임 프로그래머 입문 올인원] 데이터와 로직 : 연산 (6, 7강) (4) | 2023.09.05 |
[자료형(data type)] C++ 기본형 총정리 (0) | 2023.09.05 |
C++ 상수 총정리 (0) | 2023.09.05 |
[게임 프로그래머 입문 올인원] 데이터와 로직 : 변수, 상수 (3, 4, 5강) (2) | 2023.09.02 |