이 전의 글에서 다뤘었는데, 쫌 더 자세한, 추가적인 내용만 소개하고자 합니다.
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 되세요!
'코딩 > C, C++' 카테고리의 다른 글
[자료구조] Ordered Linked List 구현하기 (0) | 2024.10.18 |
---|---|
[자료구조] 포인터와 동적 할당, 자료구조 입문하기! (with c언어) (0) | 2024.10.18 |
[C/C++] 포인터 완벽 이해 ( 포인터, 배열, 상수, 다중포인터 ) (0) | 2024.06.02 |
[C/C++] 부동소수점 - 컴퓨터는 정확하다며... (0) | 2024.03.30 |
[C/C++] 자료형 계산에서 자주하는 실수들 (1) | 2024.03.29 |