산술연산에서 자동 형변환

Mia Lee·2021년 11월 3일
0

JAVA

목록 보기
5/98
package operator;

public class Ex2 {

	public static void main(String[] args) {

		/*
		 * 산술 연산에서의 자동 형 변환
		 * 
		 */
		
		byte b1 = 10, b2 = 3;
		
//		byte b3 = b1 + b2; // 에러 발생!
		// => b1과 b2 모두 byte 타입이므로 연산 전 int 타입으로 자동 변환됨
		//    따라서, 연산 결과가 int 타입이 되어 byte 타입에 저장 불가능
//		byte b3 = (byte) b1 + (byte) b2; // 주의! 잘못된 문법
		// => 최종적으로 연산 시점에서 다시 int로 변환 후 연산 수행함!
		
		// 연산 결과(int)를 다시 byte 타입으로 변환해야한다!
		byte b3 = (byte) (b1 + b2);
		System.out.println(b3);
		
		short s1 = 10;
//		short s2 = b1 + s1; // byte + short = int + int = int
		short s2 = (short) (b1 + s1); // int -> short으로 강제형변환
		System.out.println(s2);
		
		// int 이상의 타입이 피연산자로 있을 경우
		// => 둘 중 큰 타입으로 변환 후 연산을 진행
		char ch1 = 'A';
//		char ch2 = ch1 + 3; // char + int = int + int = int
		char ch2 = (char) (ch1 + 3); // int -> char 로 강제형변환
		System.out.println(ch2);
		
		int i1 = 100;
		long l1 = 200;
//		int i2 = i1 + l1; // int + long = long + long = long
		int i2 = (int) (i1 + l1); // long -> int로 강제형변환
		System.out.println(i2);
		
		float f1 = 1.0f;
//		long l2 = l1 + f1; // lont + float = float + float = float
		long l2 = (long) (l1 + f1);
		System.out.println(l2);
		
		System.out.println(10 / 3); // int / int = int
		// 나눗셈 연산자는 몫만 계산하지만
		// 정수 연산에서 연산 결과와
		// 실수가 포함된 나눗셈 연산 결과가 달라짐
		System.out.println(10 / 3.0); // int / double = double / double = double
		// => 10 / 3과 달리 3.0은 double 타입이므로
		//    실수 나눗셈을 수행하여 소수점 자리까지 계산됨
		
		System.out.println(10 / (double) 3); // 위의 연산과 동일하지만
		// 일반적으로 정수 -> 실수 변환하여 표현 시 .0을 붙여서 표기
		
		// byte 타입 변수에 int형 리터럴 간의 연산 결과를 저장할 때
		// 연산 결과를 최종적으로 변수에 할당하므로 별도의 형변환 필요 없음 
		byte b4 = 10 + 10;
		// byte b4 = 20; 코드를 실행한 결과와 같다. 따라서 오류 X
		System.out.println(b4);
		
//		byte b5 = 10 + 120; // 오류 발생
		// 연산 결과가 byte 범위를 벗어나므로 int형으로 취급되어
		// byte 타입 변수에 저장 불가능 => 이 때는 강제 형변환 필요!
		
	}

}














0개의 댓글