형 변환

쌩 초보의 개발로그·2022년 4월 13일
0

자바 공부

목록 보기
4/10
post-thumbnail

형 변환

int 타입의 정수 200의 bit값은 어떻게 될까?

00000000 00000000 00000000 11001000

int 타입의 정수 200은 위 처럼 되어있다.

컴퓨터에는 위와 같이 0과 1로 이루어진 조합으로 저장된다. 바로 0과 1을 bit라고 부른다.

위의 데이터는 8 X 4 로 되있어 32bit라고 부른다.

그러면 float 타입의 200.0의 bit값은 어떻게 될까?

01000011 01001000 00000000 00000000

정수 200과 실수 200.0은 완전히 다른 것을 볼 수 있다. 이때 int의 값과 float의 값을 더하려면 한가지의 형으로 변환을 해주어야 한다. 예를 들면 int값을 float형으로 변환 즉 데이터 타입 전환해야 한다.

자바에서는 형 변환을 자동으로 처리해주는데 이러한 전환 작업을 자동(암시적) 형 변환(implicit Conversion)이라고 부른다.

자동 형 변환(implicit Conversion)

double a = 4.5F;

위의 코드를 보면 double타입의 변수 a에 float값 4.5를 대입하고 있다.

이때 4.5F는 자동으로 double로 형 변환이 일어나게 된다. 그 이유는 double타입이 float타입보다 더 많은 수를 표현할 수 있기 때문이다.

타입을 변경해도 정보의 손실이 일어나지 않는 경우 자동 형 변환이 일어난다.

그러면 double타입을 float타입으로 변환을 할 수 없을까?

float a = 4.5;

정답은 형 변환을 하는 순간 에러가 일어나게 된다.

왜그럴까? 그것은 바로 4.5의 상수는 double의 형식을 가지고 있는데 이 double형식을 더 작은 표현 범위를 가지고 있는 float에 넣으려고 하기 때문에 에러가 발생하는 것이다.

이때 그러면 확인할 수 있는것이 있다.

자동 형 변환의 원칙은 표현범위가 작은 데이터 범위에서 큰 표현 범위를 가지고 있는 타입으로만 변환을 허용한다는 것이다.

자동 형 변환이 일어나는 규칙 및 데이터 형식을 봐보자

byte --> short, char --> int --> long --> float --> double

int타입은 long이 될 수 있지만 long타입은 int타입으로의 형 변환이 불가능하다.

int a = 5;
float b = 2.0F;
double c = a + b;

위의 코드를 연산하면 두번의 형 변환이 발생하는데 이때 정상적으로 실행이 되는 것을 볼 수 있다.

int와 float가 붙으면 int는 자동적으로 float로 형 변환이 일어나게 되기 때문에 float + float의 값으로 더해진다고 볼 수 있는데 이때 최종적으로 c에 담기는 데이터 형은 double이기 때문에 float --> double로 형 변환이 일어나 double의 형식을 가진 c에 담기기 때문에 최종 데이터 형은 double이다.

명시적 형 변환

자동으로 형 변환이 되지않을때는 수동으로 형 변환을 진행을 해야 한다. 이를 명시적 (Explicit Conversion)이라고 한다.

float a = 100.0;
int b = 100.0F;

위의 코드는 에러가 난다.
자동으로 형 변환이 이루어지지 않았기 때문이다.

float a = (float)100.0;
int b = (int)100.0F;

이 코드는 에러가 나지 않는다. 그 이유는 명시적으로 즉 수동으로 형 변환을 해주었기 때문이다.

괄호 안에 데이터 타입을 지정해 값 앞에 위치시키는 것을 명시적 형 변환이라고 한다.

(데이터 타입)데이터 값

형 변환은 한 번에 공부를 할 수 없기 때문에 앞으로 공부를 진행하며 더 알아보도록 하겠다.

profile
안녕하세요 쌩 초보 장휘주 입니다. 열심히 하는 개발자가 될게요.

0개의 댓글