happy coding

[c] 타입 변환 본문

self study/언어의 기본부터

[c] 타입 변환

yeoonii 2022. 11. 16. 23:52
TCP school을 보고 정리한 내용입니다.

타입 변환(type conversion)은 다른 타입끼리의 연산 중에, 하나의 타입을 다른 타입으로 바꾸는 행위를 말한다. 표현 범위가 좁은 타입에서 더 넓은 타입으로의 타입 변환은 큰 문제가 되지 않지만, 반대의 경우에는 데이터 손실이 발생한다. 타입 변환은 크게 1. 묵시적 타입 변환(자동 타입 변환) 2. 명시적 타입 변환(강제 타입 변환)이 있다.

묵시적 타입 변환(자동 타입 변환, implicit type conversion)

묵시적 타입 변환은 대입 연산이나 산술 연산에서 C 컴파일러가 자동으로 실행해주는 타입 변환을 가리킨다. C언어에서는 대입 연산 시 연산자의 오른쪽에 존재하는 데이터의 타입이 연산자의 왼쪽에 존재하는 데이터의 타입으로 묵시적 타입 변환이 진행된다. 또한 산술 연산에서는 데이터의 손실이 최소화하는 방향으로 묵시적 타입 변환이 진행된다. 

char ch = 200;		//결과는 쓰레기값
int num01 = 3.14;	//결과는 3
double num02 = 5;	//결과는 5.0000

위에서 char형 변수에 char형 변수가 표현할 수 있는 범위를 넘는 데이터를 저장하는데, 전달된 데이터의 상위 비트가 자동으로 삭제되어 데이터 손실이 발생한다. int도 char과 마찬가지로 데이터 손실이 발생하여 소수 부분이 자동으로 삭제된다. 하지만 double형 변수에 int형 데이터를 저장하는 것은 자동 타입 변환이 되지만, 데이터 손실은 발생하지 않는다.

C 컴파일러가 자동 타입 변환을 수행하는 순서는 char > short > int > long > float > double > long double이다.

명시적 타입 변환(강제 타입 변환, explicit type conversion)

명시적 타입 변환은 사용자가 타입 캐스트(type cast)연산자를 사용하여 강제적으로 수행하는 타입 변환을 가리킨다. 변환하고자 하는 데이터의 앞에 괄호()를 추가하고, 그 안에 변환할 타입을 적는다. 여기서 이 괄호()를 타입 캐스트(type cast) 연산자라고 한다.

int num01 = 1;
int num02 = 4;

double result01 = num01 / num02;		//결과값은 0.0000이다
double result02 = (double)num01 / num02;	//결과값은 0.2500이다

result01이 0.000인 이유는 산술 연산에 대한 결과값의 타입은 피연산자의 타입과 언제나 일치하기 때문이다. 다시 말해, int형 데이터끼리의 산술 연산에 대한 결과값은 언제나 int형 데이터로 나온다. 반대로, 두번째 연산처럼 하나의 피연산자를 명시적으로 double형으로 지정해야만 정확한 결과값을 얻을 수 있다.

'self study > 언어의 기본부터' 카테고리의 다른 글

[c] 조건문  (0) 2022.11.18
[c] 연산자  (0) 2022.11.17
[c] 변수와 상수  (0) 2022.11.15
[c] 변수  (0) 2022.11.15
[c] 입출력함수  (0) 2022.11.14
Comments