[자바의 정석] 3장 연산자 Operator

연산자

연산자는 연산을 수행하는 기호를 뜻한다

operator : 연산을 수행하는 기호 (+, -, *, / )

operand : 연산자의 작업 대상 (변수, 상수, 리터럴, 수식)

연산자의 우선순위

  1. 산술 > 비교 > 논리 > 대입 순서대로 진행된다 (대입이 맨 마지막)
  2. 단항(1) > 이항(2) > 삼항(3) 순서대로 진행된다.
  3. 단항 연산자와 대입연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.

연산자 종류

단항연산자 (←)

  • ++, —, +, -, ~, !, (type)

산술연산자 (→)

  • *, /, %
  • +, -
  • <<, >>

비교연산자 (→)

  • <, >, <=, >=, instance of
  • ==, !=

논리연산자 (→)

  • &
  • ^
  • |
  • &&
  • ||

삼항연산자 (→)

  • ?:

대입연산자 (←)

  • ==, +=, -=, *=, /=, %=

증감연산자

  • 전위형

    • 값이 참조되기 전에 증가시킨다

      j = ++i;
      // 이 식은 아래와 같다.
      ++i;
      j = i;
  • 후위형

    • 값이 참조된 후에 증가시킨다

      j = i++;
      //이 식은 아래와 같다.
      j = i;
      i++;

논리연산자

효율적인 연산

OR 연산 || 의 경우 좌측 피연산자가 ‘true’ 이면 우측 피연산자의 값은 평가하지 않는다

AND 연산 &&의 경우 좌측 피연산자가 ‘false’ 이면 우측 피연산자의 값은 평가하지 않는다.

→ 따라서 피연산자의 위치에 따라 연산속도가 달라지며, OR연산의 경우 연산결과가 ‘참’일 확률이 높은 피연산자를 왼족에 놓아야 더 빠른 연산결과를 얻을 수 있다.

비트연산자

  • 비트연산자는 피연산자를 비트 단위로 논리연산한다
  • 피연산자를 이진수로 표현했을 때 각 자리를 연산한다.
  • 정수만 허용된다.
| (OR연산자) : 피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다. 그외에는 0을 얻는다.
& (AND연산자) : 피연산자 중 양 쪽이 모두 1이어야만 1을 결과로 얻는다. 그외에는 0을 얻는다.
^ (XOR연산자) : 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 떄는 0을 얻는다.
~ (NOT연산자) : 피연산자를 2진수로 표현했을 때 01, 10으로 바꿔준다. !와 비슷하다.

쉬프트 연산자 >>, <<

피연산자의 각자리를 오른쪽(>>), 또는 왼쪽(<<)으로 이동한다.

8 << 2 //8의 2진수를 왼쪽으로 2자리 이동한다 즉 8 * 2^2의 역할
x << n // x * 2^n
x >> n // x / 2^n

Reference

  • 남궁성, Java의 정석 (3rd Edition), 도우출판

Written by@Gomster
항상 노력하고 나아가는 백엔드 개발자가 되고 싶은 대학생입니다.

GitHub