프로그래밍 언어/C++

C++ 자료형의 타입 변환

순정법사 2023.09.05

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

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com