Notice
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Today
Total
관리 메뉴

Study Note

[C/C++ Syntax] #006 형변환(Type conversion) 본문

- 프로그래밍 언어(Programming Language)/C\C++

[C/C++ Syntax] #006 형변환(Type conversion)

mymir 2021. 1. 3. 17:46

형변환(Type conversion)이란 데이터의 자료형이 바뀌는 것을 의미합니다. 이런 형변환에는 크게 컴파일러에 의해 자동적으로 수행되는 묵시적 형변환이 있고, 프로그래머가 직접적으로 변경하는 명시적 형변환이 있습니다.

 

 

 

묵시적 형변환


묵시적 형변환은 자동적 형변환이라고도 불리는 형변환으로 크게 세 가지가 있습니다.

 

첫째로 대입 연산시 일어나는 형변환이 있습니다. 저장할 변수의 자료형과 저장될 데이터의 자료형이 다른 경우 일어나는 형변환 입니다. 여기서 저장될 데이터가 저장할 변수의 자료형으로 바뀌는데, 데이터의 크기가 더 작은 경우 올림 변환(promotion), 데이터의 크기가 더 큰 경우 내림 변환(demotion)이 발생합니다.

올림 변환은 크게 문제가 되지 않지만, 내림 변환은 데이터 손실을 일으키므로 사용에 주의해야 합니다.

// promotion
double x;
x = 3; // x에 3.0이 저장됨

// demotion
int y;
y = 3.14; // y에 3이 저장됨

 

 

둘째로 정수 연산시 일어나는 형변환이 있습니다. 정수 상태의 데이터(int, short, char 등)를 연산하는 경우 모두 int형으로 통일하여 처리합니다. 이는 CPU가 사용하는 가장 빠른 기억요소인 레지스터(register)와 int형의 크기가 같기 때문에 레지스터 상에서 정수연산을 수행하기 위해 이런 형변환이 일어나는 것입니다.

 

 

셋째로 수식에서의 형변환이 있습니다. 계산을 하다보면 서로 다른 데이터가 연산되는 경우가 종종 발생하는데, 이 경우에 피연산자 중 크기가 가장 큰 데이터의 자료형으로 모두 형변환되어 연산이 수행됩니다. 예를 들어 int형 1과 double형 1.5를 더하면 int형 1이 double형 1.0으로 형변환되어 double형 2.5라는 수식값을 갖게 됩니다. 이런 형변환을 이용하면 다음과 같이 몫의 연산을 나누기 연산으로 수행할 수 있습니다.

int x = 5;
double y;

// 수식에서의 형변환으로 정수 데이터(x)의 몫을 계산
y = (1.0 * x) / 2 // 2.5

 

 

 

명시적 형변환


명시적 형변환은 형변환(type cast) 연산자를 이용해 자료형을 직접 바꿔주는 방법입니다.

(바꿀 자료형) 데이터

의 형식으로 사용되며 연산자를 사용한 식이므로 반드시 수식값을 갖게 됩니다.

 

여기서 주의해야 할 점은 데이터의 자료형 자체가 바뀌는 것이 아니라 데이터를 원하는 자료형으로 수식값을 내놓는다는 것입니다. 예시를 통해 살펴봅시다.

int x = 1;
double y = (int)x;

x // 1
y // 1.0
Comments