본문 바로가기

c&c++

자료형의 변환

1. 대입연산의 전달과정에서 발생하는 자동적인 형 변환

대입 연산자의 왼편과 오른편에 존재하는 두 자료형이 일치하지 않는 경우,

왼쪽의 피연산자를 대상으로 형 변환이 자동으로 일어난다.

저장소의 자료형에 맞춰서 형 변환이 얼어나야 값의 저장이 가능하기에 그러하다.

ex. double num1 = 245; // int형 정수 245를 double형으로 자동 형 변환

 

 

 

2. 피연산자의 자료형 불일치로 발생하는 자동 형 변환

피연산자의 자료형이 일치하지 않아서 발생하는 자동 형 변환은 데이터의 손실을 최소화하는 방향으로 진행된다.

 

int > long > long long > float > double > long double

 

ex. double num1 = 5.15 + 19;

위 예에서는 실수 5.15와 정수 19과 결합한다. 이 때 정수와 실수는 표현방식이 다르므로 원칙적으로 덧셈이 불가능하다.

5.15를 정수형으로 변환할 경우 0.15의 손실이 발생하므로 손실이 발생하지 않는 19와 달리 손실을 최소화 할 필요가 있다. 따라서 int형 정수 19가 double형 실수로 형 변환된다. 산술연산에서의 자동 형 변환.

 

 

 

3. 명시적 형 변환: 강제로 일으키는 형 변환


#include<stdio.h>

int main(void)
{
int num1 = 3, num2 = 4;
double divResult;
divResult = num1 / num2;
printf("나눗셈 결과: %f \n", divResult);
return 0;
}

 

위 코드의 결과는 0.0000000이다.

num1과 num2는 정수이기 때문에, 나눗셈의 결과로 나온 소수점 이하의 숫자는 표현하지 않는다.

다시 말해, 연산결과의 자료형은 피연산자의 자료형과 일치한다.

이를 강제로 변환하기 위해서 '( ) : 형 변환 연산자'를 사용한다.

 

divResult = (double)num1 / num2

divResult = 3.0 / num2; // ( )연산자에 의해 int num1이 double num1로 변환

divResult = 3.0 / 4.0 // 산술연산에서의 형 변환 규칙에 의해 num2에 저장된 값도 double형으로 자동 형 변환

divResult = 0.75

 

 

--------------------------------------------------------------------------------------------------------------

 

#include<stdio.h>

int main(void) {
char ch = 65;
printf("65를 아스키코드로 출력하면 %c가 나온다 \n", ch);
printf("변수 ch를 숫자 그대로 출력하면 %d가 나온다 \n", ch);
}

 

--------------------------------------------------------------------------------------------------------------

 

출력값

65를 아스키코드로 출력하면 A가 나온다
변수 ch를 숫자 그대로 출력하면 65가 나온다