티스토리 뷰

IT/Java

연산의 순서와 방향

오예봉봉 2020. 4. 11. 21:44


연산의 과정에서는 다양한 연산자가 복잡하게 혼합된 경우가 많다. 우리는 이미 사칙 연산에서의 우선순위를 잘 알고 있다. 덧셈 뺄셈보다는 곱셈 나눗셈이 선 순위이다. 그러면 자바에서 다른 연산자들 끼리는 우선 순위가 어떨까? 다음과 같은 연산에서 누가 더 우선일까?


x > 0  &&  y < 0


&&연산이 먼저인가 아님 > , < 연산이 우선인가 자바 프로그램에서는 연산자의 연산 방향과 연산 순위가 이미 정해져 있다.  논리 연산자 && 보다는 비교 연산자 > , < 가 우선이다. 따라서 , 비교 연산을 먼저 수행하고 x > 0 , y < 0 에서 나오는 값을 && 연산한다. 그러면 순위가 동일한 연산자간에는 어떨까? 이 것은 연산의 방향에 따라 다르다. 자바에서는 일반적으로 동일한 순위의 연산은 좌측에서 우측으로 연산을 한다. 예컨대 , 다음 연산을 보자.


30*2 /3 %5 


위 연산에서 * , / , % 은 모두 동일한 연산 순위를 갖고 있다. 이런 경우 위에서 언급한 것 처럼 왼쪽에서 오른쪽으로 연산 한다.  따라서 30 * 2 가 먼저 연산 되어 60이 나오고 그 후 60/3 이 연산 되어 20 이 산출되고 20%5 가 연산 되어 0이 나온다.


그러나 ,  ++ , -- , ! , ~ 같은 단항 연산자 , 부호 연산자(+ ,-) , 대입 연산자 ( = ,+= , -= 기타 등등) 는 우측에서 좌측으로 연산 한다. 


x = y = z = 5 ;


위 연산은 z = 5 , y = z . x = y 순으로 연산이 된다. 따라서 x ,y .z 값은 모두 5 이다.   이처럼 연산자에 따라 연산의 순위와 방향이 틀려질 수 있으므로 조심 해서 연산해야 한다. 연산의 우선 순위와 방향에 관하여 표로 정리 하여 보자.


연산자 

 연산 순위 

 연산 방향

 증감(++,--),부호(+,-),비트(~),논리(!)

 1

 오른쪽에서 왼쪽으로

 산술(*,/,%)

 2

  왼쪽에서 오른쪽으로

 산술(+,-)

 3

  왼쪽에서 오른쪽으로

 shift(<<,>>,>>>)

 4

  왼쪽에서 오른쪽으로

 비교(<.>,<=,=>,instance of)

 5

  왼쪽에서 오른쪽으로

 동등비교(==,!=)

 6

  왼쪽에서 오른쪽으로

 논리(&)

 7

  왼쪽에서 오른쪽으로

 논리(^)

 8

  왼쪽에서 오른쪽으로

 논리(!)

 9

  왼쪽에서 오른쪽으로

 논리(&&)

 10

  왼쪽에서 오른쪽으로

 논리(||)

 11

  왼쪽에서 오른쪽으로

 조건(?)

 12

  왼쪽에서 오른쪽으로

 대입(=,+=,-=,/=....기타 등등)

 13

오른쪽에서 왼쪽으


위 포와 같이 자바에선 우선 순위와 방향이 정해져 있다. 그러나 , 복잡하게 연산자들이 혼합되 있다면 어떤 연산을 우선 해야 할지 곤란할 때가 종종 있다.

이럴 경우에는 ( )를 이용해서 우선 순위를 처리하는 것이 좋다.


int number 1 = 1 ;

int number 2 = 1 ;

int number 3 = 1 ;

int result = number 1 +  number 2 * number 3 ; 


위 코드에서 number 2 * number 3 가 먼저 연산 된 후에 그 연산 값과 number 3 의 + 연산이 수행 된다. 그런데 ,  number 1 +  number 2 를 먼저 연산하고 싶다면 ( )를 이용 하여 (number 1 +  number 2 )와 같이 묶는다면 * 연산보다 우선 연산 된다.


요약을 해보면 다음과 같다.

  1. 연산은 단항 , 이항 , 삼항 순서로 연산이 된다.
  2. 산술 ,비교, 논리,대입 연산자 순서로 연산이 된다.
  3. 단항 연산자 와 대입 연산자를 제외 하고 나머지 모든 연산자는 좌측에서 우측으로 연산을 한다.
  4. 연산이 복잡할 경우 ( )를 이용하여 연산 순위를 정해 줄 수 있다














'IT > Java' 카테고리의 다른 글

단항 연산자 (2)  (0) 2020.04.13
단항 연산자 (1)  (0) 2020.04.12
자바 연산자  (0) 2020.04.10
타입 변환(형 변환)  (0) 2020.04.08
데이터 타입(data type)  (0) 2020.04.08