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가 나온다
'c&c++' 카테고리의 다른 글
scanf함수 이야기 (0) | 2021.09.14 |
---|---|
printf함수: 서식 문자를 정돈 및 정렬하여 출력하기 (0) | 2021.09.14 |
선언하는 자료형에 따라 상수의 자료형도 결정되는가? (0) | 2021.09.14 |
정수형 데이터를 n비트 오른쪽으로 shift (0) | 2021.09.14 |
16진수 입력을 10진수로 출력하는 코드 작성 (0) | 2021.09.14 |