char형으로 표현된 데이터의 표현방식을 int형으로 바꾸는 것 처럼 데이터의 표현 방식을 변환하는것을 자료형 변환 이라고 한다.
자료형 변환은 자동으로 발생하는 자동 형 변환과 프로그래머가 형 변환을 명시해서 강제로 변환이 일어나게 하는 강제 형 변환이 있다.
double num1 = 245; // int형 정수 245를 double형으로 자동 형 변환 / 245.0
int num2 = 3.14 // double형 실수 3.14를 int형 정수로 자동 형 변환 / 3
위 코드와 같이 실수형 데이터를 정수형 데이터로 변환하는 과정에서는 소수부의 손실이 발생한다.
int형 정수 129를 char형 정수로 형 변환하는 경우에는 char형의 바이트 크기에 맞춰 상위 바이트를 소멸시킨다. 또한 이러한 과정으로 부호가 바뀔 수도 있다.
#include <stdio.h>
int main(void){
double num1 = 234;
int num2 = 3.14;
int num3 = 129;
char ch = num3;
printf("int 245 to double : %f\n", num1);
printf("double 3.14 to int : %d \n", num2);
printf("big int 129 to small int : %d \n", ch);
return 0;
}
/* output :
int 245 to double : 234.000000
double 3.14 to int : 3
big int 129 to small int : -127
*/
double num1 = 5.15 + 19; 와 같이 실수형 데이터와 정수형 데이터의 연산을 하는 경우 실수형 데이터가 정수형으로 형변환 하게 되면 소수부의 손실이 발생한다. C는 연산시 자료형이 일치하지 않아 자동 형 변환을 해야 하는 경우 형 변환은 데이터의 손실을 최소화 하는 방향으로 진행된다.
#include <stdio.h>
int main(void){
int num1 = 3, num2 = 4;
double divResult;
divResult = num1 / num2;
printf("result div : %f\n", divResult);
return 0;
}
// output : result div : 0.000000
위 코드에서 3 / 4 의 결과는 0.75이지만 num1과 num2가 int형이기 때문에 나눗셈의 결과는 0이 된다. C에서는 강제적인 형 변환을 명령할 때 소괄호를 사용한다. 연산을 진행하는 코드를 divResult = (double)num1 / num2; 와 같은 식으로 수정하면 0.75의 결과를 얻을 수 있다.
'Language > C, C++' 카테고리의 다른 글
[C] do~while (0) | 2020.11.28 |
---|---|
[C] while (0) | 2020.11.27 |
[C] const (0) | 2020.11.25 |
[C] 문자 표현 (0) | 2020.11.25 |
[C] unsigned (0) | 2020.11.25 |