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

+ Recent posts