본문 바로가기

old/Programming

복잡한 표현식의 연산자 그룹화: 자바 연산자 우선순위

반응형

Java Operator Precedence Table

Operator Precedence 정의

한국어로 연산자 우선 순위라고 부르지만, 연산을 우선순위에 따라서 계산하는것이 아닙니다.

복잡한 식에 여러 개의 연산자가 있을 때는 연산자 우선순위에 따라 그룹을 결정합니다.

이는 연산 순서를 말하는게 아닙니다.

예제

아래와 같은 연산이 있다고 가정할때, 컴퓨터는 a > 0을 먼저 해야 할지, 0 && b를 먼저 해야 할지 구분할수 없습니다.

int a = 1, b = 1;
a > 0 && b - ++a == 1

Java Operator Precedence Table에 따라서 그룹화를 먼저 시작합니다.

a > 0 && b - ++a == 1
a > 0 && b - (++a) == 1
a > 0 && (b - (++a)) == 1
a > 0 && (b - (++a)) == 1
(a > 0) && (b - (++a)) == 1
(a > 0) && ((b - (++a)) == 1)

이제 Logical AND에 따라서 왼쪽에서 오른쪽으로 계산합니다.

(1 > 0) && ((b - (++a)) == 1)
true && ((b - (++a)) == 1)
true && ((b - (++1)) == 1)

이제 pre-Increment 증감연산자에 따라서 다른 연산을 수행하기 전에 피연산자의 값을 1 증가시킵니다

true && ((b - 2) == 1)
true && ((1 - 2) == 1)
true && (-1 == 1)
true && false
false

증감 연산자

증감연산자 설명

++A 다른 연산을 수행하기 전에 피연산자의 값을 1 증가시킴
--A 다른 연산을 수행하기 전에 피연산자의 값을 1 감소시킴
A++ 다른 연산을 수행한 후에 피연산자의 값을 1 증가시킴
A-- 다른 연산을 수행한 후에 피연산자의 값을 1 감소시킴

Logical OR 연산자

or 연산자는 앞쪽과 뒤쪽중 어느것 하나만 true가 나오면 되므로, 연산방향에 따라서 왼쪽에서 오른쪽으로 계산을 하며, 처음 계산을 한 값이 true일 경우, 뒤쪽은 아예 계산하지 않습니다.

(1==1)||(1==2)

위와 같을 경우, (1==1)은 true이므로, (1==2)는 판별하지 않고 바로 true를 리턴합니다.

결론

Operator Precedence는 연산자우선순위라고 한국어로 번역되지만, 이는 그룹화하는 순서를 뜻합니다. 실제 연산과정은 각각 연산자의 특성을 따릅니다.

반응형