Study_Cat

꾸준히 공부하는 고양이가 될게요.

끊임없는 노력은 천재를 이긴다.

코딩/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 되세요!