연산자

연산자와 피연산자 구별하기

9 * x + 3

  • 연산자 : 연산을 수행하는 기호 -> * , +

  • 피연산자 : 연산자의 연산 수행 대상 -> 9 , x , 3

"모든 연산자는 연산결과를 반환한다."

  • 즉, 연산결과를 반환하지 않으면 연산자가 아니다.

    • ex) () -> 괄호는 연산자가 아니다.

연산자의 종류

종류연산자설명

산술 연산자

+ - * / % << >>

사칙 연산과 나머지 연산(%)

비교 연산자

< > >= <= == !=

크고 작음과 같고 다름을 비교

논리 연산자

&& || ! & | ^ ~

'그리고(AND)' 와 '또는(OR)' 으로 조건을 연결

대입 연산자

=

우변의 값을 좌변에 저장

기타 연산자

(type) ?: instanceof

형변환 연산자, 삼항 연산자, instanceof연산자

연산자의 우선순위

하나의 식에 연산자가 둘 이상 있을 때, 어떤 연산을 먼저 수행 할지를 자동 결정하는 것!

= > 5 + 3 * 4

  1. 3 * 4

  2. 5 + 12

연산 순서를 수동으로 결정하고 싶다면 괄호() 를 사용하면 됩니다.

= > (5 + 3) * 4

  1. 5 + 3

  2. 8 * 4

연산자 우선순위 표

우선순위연산자설명결합 방향

1

[]

첨자 연산자

왼쪽에서 오른쪽으로

.

멤버 연산자

왼쪽에서 오른쪽으로

2

++

후위 증가 연산자

왼쪽에서 오른쪽으로

--

후위 감소 연산자

왼쪽에서 오른쪽으로

3

!

논리 NOT 연산자

오른쪽에서 왼쪽으로

~

비트 NOT 연산자

오른쪽에서 왼쪽으로

+

양의 부호 (단항 연산자)

오른쪽에서 왼쪽으로

-

음의 부호 (단항 연산자)

오른쪽에서 왼쪽으로

++

전위 증가 연산자

오른쪽에서 왼쪽으로

--

전위 감소 연산자

오른쪽에서 왼쪽으로

(타입)

타입 캐스트 연산자

오른쪽에서 왼쪽으로

4

*

곱셈 연산자

왼쪽에서 오른쪽으로

/

나눗셈 연산자

왼쪽에서 오른쪽으로

%

나머지 연산자

왼쪽에서 오른쪽으로

5

+

덧셈 연산자 (이항 연산자)

왼쪽에서 오른쪽으로

-

뺄셈 연산자 (이항 연산자)

왼쪽에서 오른쪽으로

6

<<

비트 왼쪽 시프트 연산자

왼쪽에서 오른쪽으로

>>

부호 비트를 확장하면서 비트 오른쪽 시프트

왼쪽에서 오른쪽으로

>>>

부호 비트까지 모두 비트 오른쪽 시프트

왼쪽에서 오른쪽으로

7

<

관계 연산자(보다 작은)

왼쪽에서 오른쪽으로

<=

관계 연산자(보다 작거나 같은)

왼쪽에서 오른쪽으로

>

관계 연산자(보다 큰)

왼쪽에서 오른쪽으로

>=

관계 연산자(보다 크거나 같은)

왼쪽에서 오른쪽으로

instanceof

인스턴스의 실제 타입 반환

왼쪽에서 오른쪽으로

8

==

관계 연산자(와 같은)

왼쪽에서 오른쪽으로

!=

관계 연산자(와 같지 않은)

왼쪽에서 오른쪽으로

9

&

비트 AND 연산자

왼쪽에서 오른쪽으로

10

^

비트 XOR 연산자

왼쪽에서 오른쪽으로

11

|

비트 OR 연산자

왼쪽에서 오른쪽으로

12

&&

논리 AND 연산자

왼쪽에서 오른쪽으로

13

||

논리 OR 연산자

왼쪽에서 오른쪽으로

14

? :

삼항 조건 연산자

오른쪽에서 왼쪽으로

15

=

대입 연산자 및 복합 대입 연산자 (=, +=, -=, *=, /=, %=, <<=, >>=, >>>=, &=, ^=, |=)

오른쪽에서 왼쪽으로

우선순위 연습하기

class Operator1_1 {
    public static void main(String[] args) {
        int x = 10;
        int y = 20;

        // + 연산자는 피연산자가 2개인 이항 연산자 임으로 단항 연산자인 -x 의 -가 먼저 실행된다.
        System.out.print("-x + 3 = ");
        System.out.println(-x + 3); // -10 + 3 = -7

        System.out.print("x + 3 * y = ");
        System.out.println(x + 3 * y); // 10 + (3 * 20) = 70

        System.out.print("x + 3 > y - 2 = ");
        System.out.println(x + 3 > y - 2); // false
        System.out.print("x + 3 < y - 2 = ");
        System.out.println(x + 3 < y - 2); // true

        System.out.print("x > 3 && y < 2 = ");
        System.out.println(x > 3 && y < 2); // false

        int result = x + y * 3;
        System.out.println("result = " + result); // 10 + (20 * 3), result = 70
    }
}

연산자의 결합규칙

우선순위가 같은 연산자가 있을 때, 어떤 것을 먼저?

= > 3 + 4 - 5 -> (3 + 4) - 5

  • 기본적인 계산 순서는 왼쪽에서 오른쪽

  • 대입과 단항 연산자일 경우 오른쪽에서 왼쪽

3줄 요약

1. 산술 > 비교 > 논리 > 대입 : 대입은 제일 마지막에 수행됩니다.

2. 단항(1) > 이항(2) > 삼항(3) : 단항 연산자의 우선순위가 제일 높습니다.

3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행 방향은 왼쪽에서 오른쪽입니다.

Ref. Java의 정석 기초편 Chapter3(1, 2, 3, 4)

Ref. 연산자와피연산자, 우선순위와결합규칙

Last updated