반응형
타입 승격은 연산이나 함수 호출 과정에서 더 작은 범위나 낮은 정밀도의 타입이 자동으로 더 큰 범위나 높은 정밀도의 타입으로 바뀌는 것이라고 정의한다.
정수 승격
char c = 100;
cout << (c + 1) << endl; // c가 int로 승격되어 int 연산
- bool, char, short 같은 작은 정수형은 산술 연산에 들어가면 자동으로 int로 변환된다.
산술 변환 (int 형 변수끼리 / 나눗셈 연산을 할때)
int a = 1, b = 3;
// 1.
cout << a / b << '\n'; // 0
// 2.
cout << (double) a / b << '\n'; // 0.333333
// 3.
cout << a / (double) b << '\n'; // 0.333333
// 4.
cout << (double) (a / b) << '\n'; // 0
1의 경우
당연히 int는 정수이기 때문에 정수 부분만을 출력한다.
2, 3의 경우
int 형 a, b 중 하나라도 double 형으로 형 변환을 했을 때 double로 변환하여 결과 값을 출력한다.
4의 경우
이미 계산된 결과 값을 double로 형 변환을 하기 때문에 0이라는 결과가 출력된다.
C++ / Java / C# 등 정적 타입 언어에서는 더 큰 범위의 타입을 따라간다.
Python / JavaScript 등 동적 타입 언어에서는 알아서 형 변환을 하여 결과 값을 출력한다.
반응형
'프로그래밍 언어' 카테고리의 다른 글
| 정렬의 원리? 기준? (0) | 2025.10.04 |
|---|---|
| 로케일(Locale)이란? (0) | 2025.10.01 |
| 버퍼링 (Buffering) (0) | 2025.09.19 |
| 스트림 (Stream) (0) | 2025.09.19 |
| 강타입 (Strongly Typed) VS 약타입 (Weakly Typed) (0) | 2025.09.18 |
댓글