C언어 - 자료형 변환

Programming/C 2016. 2. 3. 20:50

1. 자동 형변환

컴파일러가 자동으로 해주는 자료형의 변환이다.

다른 자료형 간 산술 연산을 하는 경우 자동 형변환이 발생한다.

예를 들어 정수+실수와 같이 자료형이 다르면 컴파일러가 자동 형변환의 우선순위에 자동형변환을 해준다.

우선순위는 char  int  long  float  double  long double순이다.

<실습>

#include <stdio.h>

int main()

{

   int a = 100;   // 정수

   double b = 1.2;   // 실수

   printf("%lf \n", a+b);   // 정수 + 실수->자동으로 자료형변환이 발생.

   return 0;

}


-결과-


 

 

이것을 풀이하면 변수 a에 저장되어 있는 값 100 a+b를 연산하기 전에 double형으로 변환시켜

double+double형으로 한다.

double형으로 형 변환된 이유는?  위에 우선순위는 int 보다 double형의 우선순위가 더 높기 때문이다.

어떻게 보면 당연한건데... 쉽게 생각하자.

더 큰 놈?은 더 작은놈한테 들어가는게 말이안된다. double형같이 큰놈이 int형 같이 작은놈으로 어떻게 표현이 된단 말인가?!ㅎㅎ...

 

대입 연산을 하는 경우에는 대입 연산자를 기준으로 오른쪽에서 왼쪽으로 자동 형변환이 발생한다.

 

<실습>

#include <stdio.h>

int main()

{

   char a = 129;   // char형의 범위는 -128~+127까지다이런 범위에 129라는 값을 넣게되면 이상한 값이 들어간다어떻게? char형으로 자동형변환이 되어 저장된다오버플로우가 발생하여 -127이 출력된다.

   int b = 1.23   // 1.23의 실수형자료형이 int형으로 형변환되어 b에는 1이 저장된다.

   double c = 10;   // 정수형 자료형 10 double형으로 형변환된다출력하면당연히 10.00000 이런식으로!

 

   printf("%d %d %lf \n", a, b, c);

   return 0;

}

 

-결과-


 

 

2. 강제 형변환

프로그래머가 강제로 자료형의 형변환을 시켜준다.

<실습>

#include <stdio.h>

int main()

{

   int a = 10;

   int b = 3;

 

   double result;

   result = a/b;   // 정수형/정수형의 결과 3인데 result double형이기 때문에 대입 연산자의 자동형변환 우선순위에 따라3.000000이 저장됨.

   printf("%lf \n", result);

   result = (double)a/b;   // double로 강제 형변환 후실수형/정수형

   printf("%lf \n", result);

   result = a/(double)b;   // 정수형/실수형

   printf("%lf \n", result);

   result = (double)a/(double)b;   // 실수형/실수형

   printf("%lf \n", result);

 

    return 0;

}

 

-결과-





posted by 경원구