형변환
형변환이란?
변수, 또는 상수의 타입을 다른 타입으로 변환하는 것.
캐스팅(casting)이라고도 한다.
형변환 방법
(타입) 피연산자;
double d = 85.4;
int score = (int)d; // double 타입의 변수를 int로 형변환
- 기본형에서 boolean을 제외한 나머지 타입들은 서로 형변환 가능.
정수형간의 형변환
큰 타입에서 작은 타입(ex. int -> byte)으로 변환하는 경우, 크기 차이만큼 삭제되며, 값의 손실이 발생 할 수 있다.
작은 타입에서 큰 타입(ex. byte -> int)으로 변환하는 경우, 빈 공간은 0 또는 1로 채워진다. (값이 음수인 경우, 2의 보수법에 의해 1로 채워진다.)
실수형간의 형변환
작은타입(float)에서 큰 타입(double)로 변환하는 경우
- 지수(E)는 float의 기저인 127을 뺀 후 double의 기저인 1023을 더해서 변환한다.
- 가수(M)은 float의 가수 23자리를 채우고 남은 자리를 0으로 채운다.
double 타입에서 float으로 변환하는 경우
- 지수(E)는 double의 기저인 1023을 뺀 후 float의 기저인 127을 더한다.
- 가수(M)은 52자리중 23자리만 저장하고 나머지는 버린다. 이 때, 가수의 24번째 자리 값이 1이라면 반올림이 발생하여 23번째 자리의 값이 1 증가한다.
- float의 범위를 넘는 값을 float으로 형변환하는 경우, '±무한대' 혹은 '±0'을 결과로 얻는다.
정수형과 실수형간의 형변환
실수형을 정수형으로 형변환
정수를 2진수로 변환 한 다음, 정규화를 거쳐 실수의 저장형식으로 저장된다.
이 때, 실수형의 정밀도 제한으로 인한 오차가 발생 할 수 있다.
실수형을 정수형으로 변환.
실수형을 정수형으로 변환하면, 소수점 이하 값은 버려진다. (반올림이 발생하지 않는다.)
자동 형변환
편의상의 이유로 생략된 형변환을 컴파일러가 자동적으로 추가하는 것.
자동형변환 규칙
기존의 값을 최대한 보존 할 수 있는 타입으로 자동 형변환한다.
표현범위가 좁은 타입에서 넓은 타입으로 변환하는 경우에는 값 손실이 없으므로 두 타입 중에서 표현범위가 더 넓은 쪽으로 형변환된다.
실수형은 정수형과 값을 표현하는 방식이 다르기 때문에 같은 크기일지라도 실수형이 정수형보다 훨씬 더 큰 표현 범위를 가진다.
- boolean을 제외한 7개의 기본형은 서로 형변환이 가능하다.
- 기본형과 참조형은 서로 형변환 할 수 없다.
- 서로 다른 타입의 변수간의 연산은 형변환을 하는 것이 원칙이지만, 값의 범위가 작은 타입에서 큰 타입으로의 형변환은 생략할 수 있다.
728x90
반응형