[C] 형 변환 Type Conversion
[C] 형 변환 Type Conversion
C 언어의 자료형은 각각의 Data 가 저장되는 방식을 의미한다.
모든 데이터는 2진수로 저장 되지만, type 에 따라 Binary 로 표현되는 방식이 다르므로 저장되는 form 이 다르다는 의미이다.
int type 200 의 binary
00000000 00000000 00000000 11001000
float type 200.0 의 binary
01000011 01001000 00000000 00000000
이렇게 서로 다른 form 으로 저장되어 있는 Data 를, 원하는 Type 의 형식으로 저장 형태를 바꾸는 것을
형 변환 Type Conversion 이라고 한다.
형 변환에는 2가지 방법이 있다.
- 자동 형 변환(암시적 형 변환)
- 강제 형 변환(명시적 형 변환)
1. 자동 형 변환 (암시적 형 변환)
double a = 3.0F;
- double 타입의 변수 a 에 float 타입의 값을 대입 할 때, 자동으로 double 타입으로 형 변환 발생
- double 타입이 float 타입보다 더 많은 수를 표현 가능
- 타입을 변경해도 정보의 손실이 일어나지 않는 경우 자동 형 변환 발생
메모리 크기가 작은 자료형에서 큰 자료형으로 변환되는 것이 우선순위
2. 강제 형 변환 (명시적 형 변환)
큰 자료형에서 작은 자료형으로 Data type 을 변환 할 때, Data 의 손실이 발생한다.
char c = 1106;
printf("%c\n", c);
- 1106 은 binary 11 bits 가 필요, char 형은 8bits 이므로 Data 손실이 발생
- 1106 = 10001010010 (11bits) -> 01010010 (8bits) = 82
- ASCII Code 82 에 해당하는 문자인 'R' 이 출력
이러한 Data 손실을 최소화 하기 위해, 형 변환시 변환될 Data Type 을 명시하여 손실을 최소화 할 수 있음.
- 데이터 손실이 없는 경우(확장 변환, 프로모션(Promotion))
- 작은 자료형에서 큰 자료형으로 전환될 경우 데이터 손실이 발생하지 않습니다.
- Ex) int → double 손실 X
- 데이터 손실이 있는 경우(축소 변환, 디모션(Demotion))
- 큰 자료형에서 작은 자료형으로 전환될 경우 데이터 손실이 발생합니다.
- Ex) double → int 손실 O
#include <stdio.h>
int main(void){
//문자형(작은 자료형)
char num1 = 130;
//데이터 손실 발생
//int(정수형)
int num2 = 3.14;
//데이터 손실이 일어남
//실수형(큰 자료형)
double num3 = 5;
printf("%d\n %d\n %lf\n", num1, num2, num3);
return 0;
}
- char num1 = 130
- -126
- char의 데이터 범위는 -128 ~ +127인데 130으로 데이터 손실 and Overflow 발생
- int num2 = 3.14
- 3
- 정수형 int는 소수점을 담아내지 못해 데이터 손실 발생
- double num3 = 5;
- 5.000000
- 실수형 double 은 정수형의 메모리 크기보다 크기 때문에, 데이터 손실이 발생 X
참고 블로그
https://moolgogiheart.tistory.com/58
[C언어 강좌] 자동 형 변환/강제 형 변환
관련 글 [C언어 강좌] 자료형(정수/실수)의 종류와 크기(sizeof 함수) C언어 강좌 자료형끼리는 형 변환이 가능합니다. 즉, int형을 double형으로 바꾸고, char형을 int형 등으로 바꿀 수 있다는 소리죠!
moolgogiheart.tistory.com
https://opentutorials.org/course/1223/5330
형변환 - 생활코딩
형 변환 형 변환(Type Conversion)이란 데이터의 타입을 변경하는 것이다. 예를 들어 int 타입의 정수 200의 bit 값은 아래와 같다. 00000000 00000000 00000000 11001000 프로그래밍을 처음 시작하는 사람도 컴퓨
opentutorials.org