자바/기본적인 개념

산술 연산자(2)

백_곰 2021. 1. 2. 10:09

- 예제(1)

(이 예제를 보면, 당연히 제대로 된 값이 나와야 된다.)

(그러나 마이너스 값이 나오게 되었다. 그러한 이유는 int * int = int가 나오기 때문이다.)

(즉, int는 2x10^9까지만 저장이 되지만, 위의 결과 값은 오버플로우가 되어버린다.)

(그래서 우리는 a나 b 앞에 L이나 (long)을 명시적으로 적어줘야 한다.)

 

 

- 예제(2)

(이 예제는 연산 순서에 의미가 있다.)

(즉, 먼저 연산하는 곱하기 또는 나누기에 따라 int 범위에 넘어가는지 안 넘어가는지 체크를 해야한다.)

 

 

- 예제(3)

(이 예제에서는 char도 연산을 수행할 때, 정수형 값이 나오게 된다.)

(대신 b-a를 통해 char를 얻을려면 형변환을 명시적으로 해주어야 한다.)

(또한 아래의 예제(4)의 변수 c2 또는 c3처럼 해도 된다.)

 

 

- 예제(4) - 중요 ✔

( c2에서는 컴파일이 잘 되지만 c4에서는 컴파일 에러가 나온다. )

( 그 이유는 바로 'a' + 1은 리터럴 간의 연산이기 때문이다. )

( 즉, 컴파일러는 이 연산을 "미리 계산" 하여 상수로 저장하기 때문에 이 c2에서의 덧셈은 수행하지 않는다. )

( 그래서 형변환 명시 에러가 없었던 것이다. )

 

( 그러나, c4는 다르다. )

( 그 이유는 바로 c1변수를 사용한 연산은 리터럴 연산이 아니므로 미리 계산할 수 없다. )

 

 

 

- 예제(5)

( 두 변수의 값이 다른 이유는 반올림 유무 때문이다. )

( 즉, shortpi1은 float -> int로 변환되기 때문에 반올림 되지 않는다. )

( 그러나 shortpi2는 Math.round() 함수가 직접적으로 반올림을 해주기 때문에 가능하다. )