Search

형변환

형변환 (Casting)

변수나 리터럴의 타입을 다른 타입으로 변환하는 것
boolean을 제외한 나머지 타입들은 서로 형변환 가능!

형변환 방법

(타입)피연산자
double d = 22.2; // double 타입 -> int 타입 int score = (int)d; // d-> 85.4 -> 85
Java
형변환 후에도 피연산자의 값은 변함이 없다!
CastingEx1.java

정수형 간 형변환

큰 타입 → 작은 타입 : 값손실 발생
int → byte : 00000000000000000000000 100001010 → 00001010
작은 타입 → 큰 타입 : 빈공간0(양수)또는 1(음수)로 채워짐.
byte → int : 11111110 -> 11111111111111111111111 11111110
CastingEx2.java

실수형 간 형변환

float → double : 기저 127 → 1023, float의 가수 23자리 외엔 0으로 채움.
0 10000010 111111111111111111111110 10000000010 11111111111111111111111 00000000000000000000000000000
double → float : 기저 1023 → 1023, double의 가수 52자리 중 23자리 외엔 값손실 발생
0 10000000010 11111111111111111111111 00000000000000000000000000000 0 10000010 11111111111111111111111
만약 24째 자리수가 1이라면 반올림 발생
0 10000000010 11111111111111111111110 00000000000000000000000000000 0 10000010 11111111111111111111111
float 타입의 초과범위의 값을 float로 변환하면 ±무한대 or ±0
double d = 1.0e100; float f =(float)d; // f값은 무한대 double d = 1.0e-50; float f = (float)d; // f값은 0
Java
CastingEx3.java

정수형과 실수형간 형변환

정수형 → 실수형

정수 → 2진수 → 정규화 → 실수형 (자세한 방법은 여기 참고)
실수형의 정밀도 제한으로 인한 오차 발생에 주의 → 웬만하면 double형으로 변환

실수형 → 정수형

실수형의 소수점 이하 생략 → 정수형
CastingEx4.java

자동 형변환

형변환 생략
float f = 4321; // float f = (float)4321; byte b = 1000; // 변수의 크기보다 큰 값을 저장하느 것은 에러 char ch = (char)1000; // 명시적 형변환 // 연산과정에서 자동 형변환 (단, 더 넓은 범위의 타입에 맞춰서 연산) int i = 3; double d = 1.0 + i; // double d = 1.0 + (double)i;
Java

자동 형변환의 규칙

기존 값을 최대한 보존 가능한 타입으로 자동 형변환 (반대로는 반드시 형변환 연산자 필요)
charshort크기는 서로 같지만 범위가 다르기 때문에 자동 형변환 불가
1. 기본형끼리 서로 형변환 가능 (boolean) 제외 2. 기본형과 참조형은 서로 형변환 불가 3. 서로 다른 타입의 변수간 연산은 형변환하는 것이 원칙이지만, 값의 범위가 작은 타입 → 큰 타입은 형변환 생략 가능

참고 자료