Java 문법 2. Operator(연산자)

작성일     업데이트:

카테고리:

태그:

Operator(연산자)

1. 연산자 종류표

종류구분세부 구분연산자연산 방향우선순위
최우선 연산자직접 접근 연산자 ( )   .   { } 1
단항 연산자 +   -   !   (자료형)   ++   --   ~ 2
이항 연산자산술 연산자 *   /   % 3
+   - 4
시프트 연산자 >>   <<   >>> 5
비교 연산자 >   <   >=   <= 6
==   != 7
논리 연산자비트 논리 연산자 & 8
^ 9
| 10
일반 논리 연산자 && 11
|| 12
삼항 연산자(조건식) ? 참일때 값 : 거짓일때 값13
대입 연산자순수 대입 = 14
복합 대입산술 대입 +=   -=   *=   /=
쉬프트 대입 <<=   >>=
비트 논리 대입 &=   ^=   |
나열 연산자 , 15
  • 우선순위 : 이곳에서 우선순위는 한줄의 식 안에 여러 종류의 연산자가 있을 경우 먼저 처리할 연산자의 순서를 말한다
    int i = (a++) + b/ (--c/f) * (g-- - d) % (++e + h);
    

    위 경우처럼 여러가지 수식이 섞여있을 때 연산자의 우선순위를 따라 순차적으로 계산하면 된다
    다만 증감연산자는 전위연산인지 후위연산인지에 따라 식에 넣을 값이 달라지니 주의!


2. 연산자 사용법


[ 단항연산자 ]

  • ! : 논리부정 연산자로 !(논리값) 형식으로 쓰며 논리값을 부정하여 반대값으로 변경시킨다
boolean bool1 = true;
boolean bool2 = !bool1;
System.out.println(bool2);
// -> 시스템 출력 값 false
  • ++ -- : 증감연산자로 피연산자의 값에 1을 더하거나 빼준다, 붙어있는 위치에 따라 실행 순서도 바뀐다
    -> 전위연산 : ++(값) 먼저 연산을 진행한 후 이후 다른 연산을 진행한다
    -> 후위연산 : (값)++ 다른 연산들을 우선 실행 후 연산이 진행된다

  • ~ : 비트 반전 연산자로 정수에만 사용되며 피연산자의 이진수 비트값 0은 1로, 1은 0으로 바꾸는 연산자
    -> 부호 있는 정수 타입을 연산할 경우 부호가 반대로 변경되며, 연산 결과로 해당 정수의 1의 보수를 얻을 수 있다
    ex)
    ~10 은 -11 으로 10의 1의 보수가 된다
    ~10 +1 은 -10 으로 10의 0의 보수가 된다
    (두 수의 합이 N이 될 때, 이 수를 ‘N의 보수 관계’에 있다고 한다.)


[ 산술 연산자 ]

사칙연산을 비롯한 산술적인 연산

  • + : 더하기
  • - : 빼기
  • * : 곱하기
  • / : 나누기
    -> int형에서는 나누기 연산 후 나머지 소숫점 아래 값이 버려지기때문에 자동으로 몫만 남아 반환된다
    -> 소숫점 아래 값까지 정확하게 알고 싶다면 실수형인 float 나 double형을 사용해야한다
  • % : 나누기의 나머지 값 반환


[ 비교 연산자 ]

피연산자들의 크고 작은 관계를 따지는 연산

  • == : 두 피연산자 값이 같은지 비교 후 결과 값으로 true / false 를 반환한다
  • != : 두 피연산자 값이 다른지 비교 후 결과 값으로 true / false 를 반환한다
  • > < : 두 피연산자 값이 크거나 작은지 비교 후 결과 값으로 true / false 를 반환한다
  • >= <= : 두 피연산자 값이 크거나 같은지 혹은 작거나 같은지 비교 후 결과 값으로 true / false 를 반환한다


[ 논리 연산자 ]

AND와 OR 등 참, 거짓으로 나뉘는 논리적 연산

  • && : And의 개념으로 두 피연산자가 모두 true인지 확인 후 결과 값으로 true / false 를 반환한다
  • || : Or의 개념으로 두 피연산자 중 하나라도 true인지 확인 후 결과 값으로 true / false 를 반환한다

  • Dead code 의 발생
    • 논리 연산자를 사용하며 앞의 조건식을 확인 후 바로 true/false값이 결정되어 버려서 뒤의 조건식이 아예 실행되지 않고 구문이 끝나게 되는 경우가 있는데 이때 뒤에 실행되지 않는 코드를 Dead code라 한다
    • && : (false)&&(조건식) 같은 경우일 때 이 코드는 앞선 조건식에서 false를 확인하면 바로 false를 반환하며 끝나버린다.
    • || : (true)||(조건식) 같은 경우일 때 이 코드는 앞선 조건식에서 true를 확인하면 바로 true를 반환하며 끝나버린다


[ 복합 대입 연산자 ]

  • += -= *= /= %= : 다른 연산자와 대입 연산자가 결합한 것으로 자기 자신과 연산 후 연산 결과를 자기 자신에게 누적 대입한다
    -> ex) a += 10 == a = a+10


[ 삼항 연산자 ]

  • (조건식) ? 식1 : 식2 : 조건식의 결과값에 따라 참이면 식1 거짓이면 식2 에 해당하는 부분을 동작한다. 삼항 연산자 안에 또 삼항 연산자를 넣는 식으로 중첩하여 사용도 가능하다.
int result1 = a > b ? a++ : b--;
int result2 = a < b ? a++ : (b == 0 ? a-- : b++);

댓글남기기