[JAVA] 자동 형 변환 / 강제 형 변환

이현경·2021년 4월 7일
0

JAVA

목록 보기
2/77

자동 형 변환
byte < short < int < long < float < double


public class Promotion {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		byte b = 10;	// 00001010
		short s = b;	// 00000000 00001010
		int i = s;		// 00000000 00000000 00000000 00001010
		long l = i;		// 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00001010
		
		float f = 0.5f;
		double d = f;	// 자동 형 변환
		f = i;
		System.out.println(f); // 결과 값 : 10.0
		
		f = l;
		System.out.println(l); // 결과 값 : 10
		
	}

}

public class OperationCasting {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		short s = 10;	// 00000000 00001010
		int i = 65537;	// 00000000 00000001 00000000 00001010
		int i1 = s + i;	// 2byte + 4byte (자동 형 변환 발생)
		System.out.println(i1);	// result : 65547
		
		int i2 = 10;
		double d = 170.5;
		double d1 = i2 + d;	// 4byte + 8byte (자동 형 변환 발생)
		System.out.println(d1);	// result : 180.5
		
		System.out.println(10 + 20);	// 4byte + 4byte
		
		byte b = 10;
		byte b1 = 20;
		// byte b2 = b + b1;	// 2byte + 2byte 이므로 연산 불가
		int b2 = b + b1;
		System.out.println(b2);	// result : 30
		
		short s1 = 10;
		short s2 = 20;
		int i3 = s1 + s2;
		System.out.println(i3);
		
		float f1 = 10.5f;
		float f2 = 20.5f;
		float d2 = f1 + f2;
		System.out.println(d2);	// result : 31.0
		
		double d3 = f1 + 100.5;	// 4byte + 8byte (자동 형 변환 발생)
		System.out.println(d3);	// result : 111.0
		
		
	}

}

연산식에서도 자동 형 변환이 발생한다.

정수는 4byte로 연산
따라서 short/byte는 연산 시 부호비트 때문에 음수가 나오는 경우도 있다.

실수는 8byte로 연산
따라서 float 또한 형 변환이 일어난다.

강제 형 변환
: 크기가 큰 값을 작은 크기로 변환하는 것을 강제 형 변환이라고 한다.
(자료형을 역순으로 자동으로 변환하는 법은 없다.)


public class Casting {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int i = 10;			// 00000000 00000000 00000000 00001010
		short s = (short)i;	// 00000000 00001010
		System.out.println(i); // 결과 값 : 10
		
		i = 65537;		// 00000000 00000001 00000000 00000001
		s = (short)i;	// 00000000 00000001
		System.out.println(s); // 결과 값 : 1

	}

}

값이 잘리는 경우가 발생하여 원하는 값과 다른 값을 가져오는 경우도 있다.


public class Casting {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int i = 10;			// 00000000 00000000 00000000 00001010
		short s = (short)i;	// 00000000 00001010
		System.out.println(i); // 결과 값 : 10
		
		i = 65537;		// 00000000 00000001 00000000 00000001
		s = (short)i;	// 00000000 00000001
		System.out.println(s); // 결과 값 : 1

		float f = 15.5f;
		int i1 = (int)f;
		System.out.println(i1);	// 결과 값 : 15
		
	}

}

실수를 정수로 강제 형 변환을 하면 정수 값만 저장이 된다.

profile
25. 컴퓨터학과 졸업 / SQLD, 정보처리기사 취득

0개의 댓글