반응형

사칙 연산자

public class PrintfEx2 {

	public static void main(String[] args) {
		
		int a = 10;
		int b = 4;
		
		System.out.printf("%d + %d = %d%n", a, b, a+b);
		System.out.printf("%d - %d = %d%n", a, b, a-b);
		System.out.printf("%d * %d = %d%n", a, b, a*b);
		System.out.printf("%d / %d = %d%n", a, b, a/b);
		System.out.printf("%d / %f = %f%n", a, (float)b, a / (float)b);
		// int i를 f float으로 변환하니까 i가 f보다 범위가 작으므로 (float)을 붙여준다. (한 쪽만 변환해도 변환이 된다)
		// float을 int로 변환하면 float 단위가 더 크기 때문에, 값 손실이 난다. 그래서 float으로 전환한다.

	}

}

 

산술 변환

"연산 전에 피연산자의 타입을 일치시키는 것" - 타입을 일치시켜야 계산이 가능하다.

ⓐ 두 피연산자의 타입을 같게 일치시킨다. (보다 큰 타입으로 일치)

 

ⓑ 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.

(byte, short, char)

-> 해당 타입들의 범위가 작기 때문에, 오버플로우가 나서 값 손실이 날 수 있기 때문에, int로 자동 변환된다.

public class PrintfEx3 {

	public static void main(String[] args) {
		int a = 1_000_000;	// 1,000,000 1백만 = 10의 6제곱
		int b = 2_000_000;	// 2,000,000 2백만 = 10의 6제곱
		
		// 10의 12제곱. int의 범위는 10의 9제곱.
		
		long c = a * b;		// a * b = 2,000,000,000,000 ? -> -1454759936
		long d = (long)a * b; // 2,000,000,000,000 (long) 형 변환은 한 번만 하면 된다.
		
		System.out.println(c);
		System.out.println(d);

	}

}
반응형