본문 바로가기
공부/개발노트

[C/C++] 문제가 발생하는 형변환

반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
using namespace std;
 
int main(){
    // 정수 타입간의 형변환 
    int i = 131071;
    unsigned short i2us = i; // int에서 unsigned short로 형변환
    short i2s = i; // int에서 short로 형변환
        
    // 실수 타입간의 형변환
    double d = 12345678901234.56789;
    float d2f = d; //  double에서 float로 형변환 
    
    // 실수 타입에서 정수 타입으로 형변환
    float f = 76543.21f;
    short f2s = f; 
    
    // 정수타입에서 실수 타입으로 형변환
    int big_i = 1234567890;
    float i2f = big_i; // int에서 float로 형변환 
    
    // 결과 출력
    cout << fixed;
    cout << "int : " << i << "\n\tto unsigned short : " << i2us 
        << "\n\tto short : " << i2s << "\n\n";
    cout << "double : " << d << "\n\tto float : " << d2f << "\n\n";
    cout << "float : " << f << "\n\tto short : " << f2s << "\n\n";
    cout << "int : " << big_i << "\n\tto float : " << i2f << "\n\n";
     
    return 0;
}
 
cs



05~08행 : 작은 크기의 정수 타입이 보관하기에는 너무 큰 수를 대입, 형변환시 이상한 값으로 변질
10~12행 : float 타입이 보관하기에는 정밀도가 높은 실수를 대입하고 있음. 형변환 시에 근사 값으로 변환. 근사 값으로의 변환도 불가능한 경우에는 이상한 값으로 변질될 수 있다.
14~16행 : 76543.21이 정수형으로 형변환되는 경우 76543이 되야한다. short 타입의 변수가 담기에는 너무 큰 수다. 그래서 형변환 시에 이상한 값으로 변질되었다.
18~20행 : 기본적으로 실수 타입은 정수 타입보다 큰 수를 보관할 수 있지만, 내부 구조상 정밀도를 잃어버릴 수도 있다.


23행 : cout 객체를 통해서 실수 값을 출력할 때 123E-3이 아닌 0.00123처럼 출력하게 만든다.


반응형

'공부 > 개발노트' 카테고리의 다른 글

[C/C++] 사칙연산 프로그래밍  (0) 2016.08.13
[C/C++] 명시적인 형변환  (0) 2016.08.13
[C/C++] 형변환 이해하기  (0) 2016.08.12
[C/C++] bool 타입 이해  (0) 2016.08.12
[C/C++] 이스케이프의 활용  (0) 2016.08.01