형 변환
변수를 선언한 이후에도 변수의 자료형을 바꾸는 것이 가능하다.
이러한 자료형의 변환에는 자동 형 변환과 강제 형 변환 두 가지 종류가 있다.
자동 형 변환
자동 형 변환은 하나의 연산식에 들어있는 연산자들의 자료형이 다를 때 자동(묵시적)으로 발생한다.
대입 과정에서의 자동 형 변환
우선 대입 과정에서 일어나는 자동 형 변환을 살펴보겠다.
double num = 245;
위 코드에서 245는 int형 정수이다.
그런데 double 형인 num에 대입함으로써 double형 실수 245.000000으로 변환된다.
마찬가지로 실수인 상수를 정수형 변수에 대입해도 형 변환이 일어난다.
int num = 3.1415;
위 코드에서는 3.1415 가 정수 int형으로 변환되면서 데이터의 손실이 일어난다.
또는 변수끼리의 대입에서도 마찬가지이다.
아래 코드에서 num1 은 int형이지만 doubl형 변수인 num2에 대입하면 double형 실수 5.000000으로 변환된다.
int num1 = 5;
double num2 = 10.0;
num2 = num1;
따라서 아래 코드에서 제대로 된 값이 출력되지 않는 것을 확인할 수 있다.
num2는 double형 변수이므로 '%d'가 아니라 '%f'를 사용해야 한다.
#include <stdio.h>
int main()
{
int num1 = 5;
double num2 = 10.0;
num2 = num1;
printf("%d", num2);
return 0;
}
정수의 승격
char형과 short형의 정수 연산을 실행할 때 두 가지 자료형은 int형으로 변환되어서 계산된다.
int형의 연산이 char형과 short형에 비해 같거나 빠르기 때문인데 요즘 CPU에서는 체감될만한 차이가 나지는 않는다.
연산 과정에서의 자동 형 변환
형 변환은 대입뿐만 아니라 연산 과정에서도 일어나게 된다.
연산과정에서의 형 변환은 데이터의 손실을 최소화하는 방향으로 일어난다.
예를 들어 실수인 3.15와 정수인 5를 덧셈할 때 3.15를 정수로 바꾸지 않고 5를 실수로 바꿔서 계산한다.
따라서 연산과정에서 일어나는 자동 형 변환은 다음 방향으로 진행된다.
char과 short는 연산과정에서 정수의 승격에 의하여 int형으로 변환되므로 위 표에 나타나지 않는다.
강제 형 변환
자동 형 변환은 대입 연산의 전달 과정에서 강제(명시적)로 발생한다.
사용자가 원하는 변수의 자료형을 원하는 대로 명시하여 변환시키는 것이다.
int형 변수를 강제로 float형 변수로 바꿔서 double형 변수에 대입하는 코드를 작성해 보겠다.
int a = 5;
double b = (float)a;
이렇게 되면 정수형 변수 a가 바로 double형 변수로 변환되지 않고 float형으로 변환된 후에 다시 double형으로 변환된다.
이번에는 자동 형 변환에서 작성한 코드를 자동형 변환이 되지 않게 작성해 보겠다.
#include <stdio.h>
int main ()
{
int num1 = 5, num2 = 2;
double div;
div = (double)num1/(double)num2;
printf("나눗셈의 결과 : %f", div);
return 0;
}
여기서는 num1과 num2 가 이미 실수인 5.000000과 2.000000이다.
따라서 'num1/num2'는 실수끼리의 연산이므로 그 값은 2.500000이다.
만약 형 변환 없이 코드를 작성했다면 'num1/num2'는 정수형이므로 그 값은 2가 된다.
'C언어 > C언어 문법' 카테고리의 다른 글
[C언어] 아스키 코드(ASCII CODE), 널(Null)과 0의 차이 (0) | 2024.02.08 |
---|---|
[C언어] 심볼릭 상수 (Symbolic Const) (0) | 2024.02.08 |
[C언어] 연산자 (산술, 대입, 관계, 논리, 복합대입, 증강 연산자) (0) | 2024.01.26 |
[C언어] 비트 연산, 비트 연산자 (0) | 2024.01.24 |
[C언어] sizeof 함수 (0) | 2024.01.23 |