Game !

강제 형변환과 자동 형변환에 대해 이해해보자!

 

 

강제 형변환

 

강제 형변환이란 ?

명시적으로 자료형을 직접 변경해주는 것을 의미합니다.

 

변수 앞에 소괄호를 통해서 변경할 수 있습니다.

 

 

간단한 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
 
void main()
{
    int a = 5;
    double c = 4.3;
    double result;
    
    result = c * a;
 
    cout << result << endl;
    /*강제형변환*/
    cout << (int)result << endl;
}
cs

 

출력결과

21.5

21

 

위에는 실수로 계산된 값을 그대로 실수형에 저장해줘서 소수점이하 자리까지 출력되는 것이고,

아래에서는 int로 강제 형변환을 시켜주기 때문에 소수점을 제외한 정수형으로 출력됩니다.

 

예제에서는 result 라는 실수형 변수 앞에 강제적으로 (int)라고 적어주었습니다.

 

 

 

 

 

 

자동 형변환

 

자동 형변환이란?

컴파일러가 자동적으로 형변환을 시키는 것을 의미합니다.

 

주로, 대입연산자에서 발생합니다.

 

대입 연산자에서 자동 형변환이 일어날 때,

대입 연산자의 왼쪽을 기준으로 형변환이 일어납니다.

 

 

 

간단한 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
 
void main()
{
    int a = 3.14;    
    char b = 97;
 
    cout << a << endl;
    cout << b << endl;
}
cs

 

출력결과

3

a

 

 

int형 변수에 실수 3.14로 초기화 하고 있습니다.

 

즉, 실수 3.14를 초기화 하고 있지만

대입 연산자의 왼쪽에 있는 자료형이 int 형이므로,

정수형태로 저장되어서 3 이 출력되는 것입니다.

 

char형 변수에 숫자 97을 저장하고 있습니다.

 

즉, 정수 97을 초기화 하고 있지만

대입 연산자의 왼쪽에 있는 자료형이 char 형이므로,

문자형태로 저장되어서 a가 출력되는 것입니다.

 

참고)

1바이트인 char 형은 문자를 표현합니다.

또한 문자는 1개만 저장할 수 있습니다.

 

만약 문자 그대로를 저장하기 위해서는

char b = 'a'; 라고 적으시면 됩니다.

 

97을 저장했는데 a가 나오는 이유는 아스키코드표를 참조하시길 바랍니다^^

 

 

간단한 문제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
 
void main()
{
    int a = 2;
    int b;
    double c = 4.3;
 
    b = (double)a * c;
 
    cout << a2 << endl;
}
cs

 

 

12번째 줄에서 보면

 

현재 int형 변수인 a를 double로 강제 형변환을 한 다음 실수형 변수 c를 곱한 후,

int형 변수 b에 저장하고 있습니다.

 

그러면 b는 무엇이 출력될까요??

 

 

출력은 8 이 됩니다.

 

a를 double로 형변환을 한다고 하더라도 a 는 그대로 2 이고, 4.3 을 곱하면 8.6 이 됩니다.

 

그러나 실수 값 8.6 을 저장하는 대입연산자 왼쪽의 자료형이 int 형 이므로

소수점이 날라가여 8 이 저장되기 때문

8이 출력되는 것입니다!^^

 

 

'C++' 카테고리의 다른 글

[C++] 템플릿 이것저것(정리중...)  (0) 2017.12.27
[C++] 메세지 패싱  (0) 2015.09.17
[C++] 싱글톤에 대한 정리  (0) 2015.09.02
[C++] 함수로 주소값 전달하는 방법  (0) 2015.08.25
[C++] 파일입출력) EOF에 대한 이해  (0) 2015.04.15