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

[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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
using namespace std;
 
int main(){
    // 다양한 타입의 변수를 정의
    int i = 65;
    float f = 66.89f;
    char c = 'C';
    bool b = true;
    
    // 형변환에 사용할 변수들을 미리 정의
    // (아래처럼 하는 것이 간결하고 좋다)
    int f2i, c2i, b2i;
    float i2f, c2f, b2f;
    char i2c, f2c, b2c;
    bool i2b, f2b, c2b;
    
    // int을 다른 타입으로 변환
    i2f = i; // int에서 float로 형변환 
    i2c = i; // int에서 char로 형변환 
    i2b = i; // int에서 bool로 형변환
    
    // float을 다른 타입으로 변환
    f2i = f; // float를 int로 형변환 
    f2c = f; // float를 char로 형변환 
    f2b = f; // float를 bool로 형변환 
    
    // char을 다른 타입으로 변환
    c2i = c; // char를 int로 형변환 
    c2f = c; // char를 float로 형변환 
    c2b = c; // char를 bool로 형변환 
    
    // bool을 다른 타입으로 변환
    b2i = b; // bool을 int로 형변환 
    b2f = b; // bool을 float로 형변환 
    b2c    = b; // bool을 char로 형변환
    
    // 결과 출력
    cout << "int : " << i << "\n\tto float : " << i2f 
        << "\n\tto char : " << i2c << "\n\tto bool : " << i2b << "\n\n";
    cout << "float : " << f << "\n\tto int : " << f2i 
        << "\n\tto char : " << f2c << "\n\tto bool : " << f2b << "\n\n";
    cout << "char : " << c << "\n\tto int : " << c2i 
        << "\n\tto float : " << c2f << "\n\tto bool: " << c2b << "\n\n";
    cout << "bool : " << b << "\n\tto int : " << b2i 
        << "\n\tto float : " << b2f << "\n\tto char : " << b2c << "\n\n";
     
    return 0;
}
 
cs


형 변환 시에 값이 변경되는 경우

 - 실수 타입에서 정수 타입으로 형변환이 발생하는 경우에는 실수의 소수점 이하 부분이 잘리게 된다.(단, 반올림이 아님)

 - 모든 타입에서 bool 타입으로 형변환할 때, 모든 0이 아닌 수는 true 즉 1로 바뀐다. 0은 그대로 0으로 남아 false의 의미를 가진다.

 - 다른 타입에서 char 타입으로 형변환할 때는 값의 변화가 발생하지 않는다.(char 타입은 단순히 작은 크기의 정수 타입임)


문제가 발생하는 형변환

 - 큰 타입의 변수에 담겨있던 값이 작은 타입의 변수에 담길 수 없을 만큼 크다면 물리적인 한계로 인하여 올바른 값이 출력되지 아니함

이런 경우에는 값의 일부가 잘려나가거나 예상할 수 없는 이상한 값으로 변질될 수 있다.



반응형