int i = 10;
float f = 20.0f;
float result = f + i; // 큰 타입으로 형변환시, 형변환연산자 생략 가능
산술 변환
연산 전에 피연산자의 타입을 일치를 위해 자동 형변환 되는 것을 '산술 변환' 또는 '일반 산술 변환'이라 하며, 이 변환은 이항 연산에서만 아니라 단항 연산자에서도 일어난다. 규칙은 다음과 같다.
+ 두 피연산자의 타입을 같게 일치시킨다. ( 보다 큰 타입으로 일치 )
+ long + int -> long + long -> long
+ float + int -> float + float -> float
+ double + float -> double + double -> double
+ 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.
+ byte + short -> int + int -> int
+ char + short -> int + int -> int
+ 모든 연산에서 '산술 변환'이 일어나지만, 쉬프트 연산자(<<, >>), 증감 연산자(++, --)는 예외이다.'
아래의 코드에서 컴파일 에러가 발생하는 원인은 ?
byte a = 10;
byte b = 30;
byte c = a * b; // (3)
컴파일 에러가 발생하는 원인
int형보다 크기가 작은 자료형의 값의 경우는 '산술 변환'에 의하여 int형으로 변환이 일어나게 된다. 따라서 "a b" 라는 표현식의 경우는 int int로 연산되며, 그에 따른 결과 또한 int형이다. 따라 int형보다 크기가 작은 byte형 변수에 별도의 형변환없이 대입하려고하여 발생한 에러이다.만약 int형보다 큰 자료형의 경우에는 자동으로 형변환이 일어나므로 괜찮다.