형변환(casting)

HYUNBIN CHO·2021년 5월 24일
0

java

목록 보기
3/23
post-thumbnail

🔷 형변환(casting)

🔸 변수 또는 상수의 타입을 다른 타입으로 변환하는 것
🔸 기본형과 참조형 간 형변환은 불가능
🔸 기본형에서 boolean을 제외한 나머지 타입은 서로 형 변환이 가능

🔷 형변환 방법

➡️ (변환할 타입) 변환하고자 하는 변수

double d = 85.4d;
int score = (int)d;

🔷 정수형 간 형변환

🔸 큰 타입에서 작은타입으로 변환할 경우, 경우에 따라 값 손실이 발생할 수 있다.

int i = 10; 
byte b = (byte)i; 
// 값 손실 없음 (10 -> 10)

int i = 300;
byte b = (byte)i;
/* 값 손실 있음 (300 -> 44)
   -> int 300 = 00000000000000000000000100101100 (32bit) 
   -> byte(8bit) 로 변환하면 00101100(10진수 44)로 잘리게 된다.
*/

🔷 실수형 간 형변환

🔸float(32bit, 7자리) -> double(64bit, 15자리)로 형변환

빈 공간은 0으로 채운다
지수 : float의 기저 127을 빼고 double의 기저 1023dmf 더해서 변환
가수 : float의 가수 23자리를 채우고 남은 자리는 0으로 채운다.

🔸 double -> float로 형변환

지수 : double의 기저 1023을 빼고 float의 기저 127을 더해서 변환
가수 : double의 가수 52자리 중 23자리만 저장되고 나머지는 버림(24번째 자리에서 반올림이 발생할 수 있음)

🔷 정수형과 실수형 간 형변환

🔸 정수형 -> 실수형
실수형은 정수형보다 큰 저장범위를 갖기 때문에 형변환에 큰 문제가 없다.
하지만 실수형의 정밀도 제한으로 인해서 오차가 발생할 수 있다.

예) int형의 최대값은 약 20억으로 10자리의 정밀도를 요구하지만, float형은 7자리의 정밀도를 제공하기 때문에 오차가 발생할 수 있다. 

➡️ 8자리 이상의 값을 실수->정수 형변환할 때는 double형으로 형변환하는 것이 좋다.

🔸 실수형->정수형
실수형의 소수점 이하의 값은 버려진다.(버려지기 때문에 반올림 발생 X)

🔷 자동 형변환

🔸 원칙 : 서로 다른 타입 간 대입, 연산을 할 때는 형변환을 하여 타입을 일치시켜야 한다.
🔸 작은 타입에서 큰 타입의 경우 형변환을 생략할 수 있다.

float f = 1234; 
// 1234는 int형이지만 float타입의 변수 f는 1234를 저장하는 데 아무 문제가 없다. 
하지만 
byte b = 1000; 
// 위의 경우 imcompatible types: possible lossy conversion from int to byte 에러가 발생한다.

🔸 서로 다른 두 타입 간 연산을 할 경우 표현범위가 더 넓은 타입으로 형변환하여 연산을 수행한다.

int i = 3; 
double d = 1.0 + i; // == double d = 1.0 (double)i;
profile
백견이 불여일타

0개의 댓글

관련 채용 정보