Limetime's TimeLine
article thumbnail
Published 2017. 9. 9. 21:12
자료형의 변환 C&C++
반응형

저료형의 변환

자료형의 변환이란? '데이터의 표현 방식을 바꾸는 것' 이라고 할 수 있다.

자료형의 변환에는 자동 형 변환과 강제 형 변환이 있는데

자동 형 변환의 경우 '묵시적 형병환'이라 하고, 강제 형 변환의 경우 '명시적 형 변환'이라고 한다.


ㆍ 자동 형 변환(묵시적 형 변환) - 대입 연산의 전달 과정. (A=B)

묵시적 형 변환이란? 침묵의 '묵'자와 비슷한 것 같다. 말 그대로 조용히 변환된다는 뜻이다.

대입 연산자(=)의 두 피연산자의 자료형이 일치하지 않으면, 왼편에 있는 피연산자를 대상으로 형 변환이 자동으로 일어남

(저장소의 자료형에 맞춰 형 변환 => 값의 저장 가능)

정수 -> 실수(double 형)     // 데이터 손실은 없지만 오차가 존재

실수 -> 정수(int 형)     // 소수부 손실 (데이터 손실)

컴퓨터 측은 '데이터 손실'을 극도로 극혐하기 때문에 오차가 존재하더라도 데이터 손실이 되지않는 방향으로 진행한다.

큰 바이트의 정수 -> 작은 바이트의 정수(int -> char)     // 변환 하고자 하는 정수의 바이트 크기에 맞춰

상위 바이트를 소멸시킨다. 즉, 부호가 바뀔 수 있다.

ex) int num3 = 129;

char ch = num3;

=> int형 num3이 char인 ch에 저장됨

char은 127까지 표현한다. 

그렇기에 129가 들어가면 -127로 표현된다.

"129와 -127이 같냐?"

아래는 1의 보수법을 취해 음수를 양수로 변환한 것이다. 

딱 맞는 것이 이해가는가?


ㆍ 자동 형 변환(묵시적 형 변환) - 정수의 승격 (Integral Promotion)

일반적으로 CPU는 int형 정수로 연산을 한다. => 다른 자료형보다 연산 속도가 빠르다.


ex) short num1 = 15, num2 = 25;     // num1과 num2는 short형으로 선언

short num3 = num1 + num2;     // num1 + num2의 값을 int형, num3에 저장할 때 short로 형 변환

변수 선언은 short형으로 했지만 연산할 때만큼은 int형으로 형 변환하여 계산함.


① num1(short) , num2(short)    => 모두 short형으로 선언

② num1(int) + num2(int)    => 모두 int형으로 변환하여 연산

③ num3(short) = num1(short) + num2(short)    => int형으로 연산된 num1 + num2의 값이 short형으로 변환되어 num3에 저장됨

'③'에서는 총 2회 자료형의 변환이 일어난 것이다.


ㆍ 자동 형 변환(묵시적 형 변환) - 피연산자의 자료형 불일치

ex) double num1 = 5.19 + 19;     // 실수 + 정수

=> 오차가 발생하더라도 데이터 손실을 최소화. 실수 + (정수를 실수로 형 변환)

ex) 5.15(double) + 19(int) => 5.15(double) + 19.0(double)

∴ 24.15(double)

* 피 연산자의 자료형이 일치하지 않아서 발생하는 자동 형 변환은 데이터 손실을 최소화하는 방향으로 진행한다.!!

char와 short는 생략 (char와 short는 연산할 때 int형으로 변환되기 때문이다.)

형 변환의 우선 순위는 정수 자료형보다 실수 자료형이 무조건 앞서있다고 정의한다.


ㆍ 강제 형 변환 (명시적 형 변환)

명시적 형 변환이란? 말 그대로 '명시한다'는 의미로 내가 직접 변환을 선언하겠다는 의미. (강제)

int num1 = 3, num2 = 4;

double divResult;

* 연산 결과의 자료형은 피연산자의 자료형과 일치.

① divResult = num1 / num2;

② divResult = (double)num1 / num2;

* (double)num1은 num1의 자료형을 double형으로 형 변환하라는 뜻.

(    )    <= 형 변환 연산자 (Type Casting Operator)

형 변환 연산자가 자동형 변형보다 더 먼저 진행됨.

③ int num1 = 3;

double num2 = 2.5 * num1;    

=> 자동 형 변환이 에러 없이 진행됨.


int num1 = 3;

double num2 = 2.5 * (double)num1;

=> 하지만, 이렇게 일부러 표시해서 어디서 형 변환이 되는지 표시해준다.

* 형 변환 위치 표시는 코드 분석을 더욱 용이하게 해준다.



 

반응형
profile

Limetime's TimeLine

@Limetime

포스팅이 좋았다면 "공감❤️" 또는 "구독👍🏻" 해주세요!