코딩/C, C++
[C/C++] 자료형의 프로모션(실수 방지!)
Study_Cat
2024. 7. 10. 19:48
이 전의 글에서 다뤘었는데, 쫌 더 자세한, 추가적인 내용만 소개하고자 합니다.
1. 자료형의 프로모션?
자료형이 다른 값들의 연산에서 어떤 자료형으로 연산되는가?
2. 자료형의 프로모션 규칙
- 정수 + 실수 = 실수
- 정수 + 정수 or 실수 + 실수 = 더 넓은 범위를 갖는 자료형
- int 형보다 작은 정수형 = int
- 부호 없는 정수형 + 부호 있는 정수형 = 부호 없는 정수형
위에서 + 로 표기한 것은 더하기 연산이 아닌 '자료형과 자료형의 만남' 을 표현하기 위해 사용했습니다.
int main()
{
double num = 3/2;
cout<<num<<"\n";
/// 1
if(3/2 > 1) cout<<"True";
else cout<<"False";
/// False
int n = 100000 * 100000 / 100000;
cout<<n;
/// 14100
}
간단한 예시로 num은 double형으로 선언되었지만 선언 값은 정수와 정수의 연산이므로 1 이 출력됨을 알 수 있습니다. 두 번째의 if 또한 3/2 는 1.5이기에 True라고 생각할 수 있지만 3/2 는 int형이기에 1이므로 False가 출력됨을 알 수 있습니다. 마지막 코드는 10만 * 10만 을 먼저 계산하는 과정에서 int 형 overflow가 발생하여 의도치 않은 값이 나오게 되었습니다.
개인적으로 위의 예시 중 첫 번째와 세 번째를 가장 많이 경험했는데요.. 이번에 확실하게 하고자 지난 포스팅보다 쫌 더 세부적으로 알아봤습니다.이번에 알아보면서 자료형의 프로모션 중 4번째 규칙은 처음보네요..
즐거운 PS 되세요!