본문 바로가기
JAVA/언어입문

자바(JAVA)의 다양한 연산자와 우선순위

by Sunyoung95 2022. 3. 4.
  • 항(Operand) : 연산에 사용되는 값
  • 연산자(Operator) : 항을 이용하여 연산하는 기호
    • 종류 : 단항 연산자, 이항연산자, 삼항연산자
1. 대입 연산자
  • =
  • 변수에 값을 대입하는 연산자
  • 연산의 결과를 변수에 대입
  • 우선순위가 가장 낮음
  • 왼쪽 변수(lvalue)에 오른쪽 값(rvalue)를 대입
  • int age = 15;

 

2. 부호 연산자
  • +, -
  • 단항 연산자
  • 양/음수 표현, 값의 부호변경
  • 변수에 +,-를 사용한다고 해서 변수의 값이 변하는건 X
  • 변수의 값을 변경하려면 대입 연산자를 사용해야한다.
  • int num = 10;
    System.out.println(-num);  // -10
    System.out.println(num);  // 10 : num값이 변한게 아님
    
    num = -num;
    System.out.println(num); // -10  : 대입연산자를 통해 num값을 음수로 변경

 

3. 산술 연산자
  • +, -, *, /, //(몫), %(나머지)
  • 사칙연산에 사용

 

4. 증가감소 연산자
  • ++, --
  • 단항 연산자
  • 1만큼 더하거나 1만큼 뺀다.
  • 항의 앞/뒤 위치에 따라 연산의 결과가 다르다.
  • int num = 10;
    int val = ++num;
    System.out.println(val);  // 11 : num값을 1 증가시킨 후 val에 대입
    System.out.println(num);  // 11
    
    int num = 10;
    int val = num++;
    System.out.println(val);  // 10 : num값을 val에 대입한 후 num값 1 증가
    System.out.println(num);  // 11

 

5. 관계 연산자
  • >, <, >=, <=, ==(동일비교), !=(다름비교)
  • 이항 연산자
  • 결과값 : True, False
  • boolean Bval = (5>=2);
    System.out.println(Bval);  // True

 

6. 논리 연산자
  • 관계연산자와 혼합하여 주로 사용
논리 연산자 연산 단락회로평가(Short Circuit Evaluation)
&&(논리곱) 둘 모두 참이어야 True 앞의 항이 false면 뒤의 항을 평가하지 않아도 false
||(논리합) 둘 중 하나만 참이어도 True 앞의 항이 true면 뒤의 항을 평가하지 안하도 true
!(부정) 단항연산자, 참/거짓을 반대로 바꿈 -
  • boolean booleanval = (5>3) && (3>2);  // True
    boolean booleanval = (5>3) || (1>2);  // True
    boolean booleanval = !(1>3);  // True
    
    int num = 10;
    int i = 2;
    boolean value = (((num = num + 10) < 10) && ((i = i + 2) > 2));
    System.out.println(value);  // False
    System.out.println(num);  // 20
    System.out.println(i);  // 2 : 단락회로평가에 의해 앞에 항이 False이므로 뒤의 항은 연산이 이루어지지 않음

 

7. 비트 연산자
  • 정수에만 사용 가능
연산자 연산 예시
~ 비트의 반전(1의 보수) a = ~a;
& 비트의 단위 AND 1 & 1; //1 그 외엔 0
| 비트의 단위 OR 0 | 0; //0 그 외엔 0
^ 비트의 단위 XOR 두 개의 비트가 서로 다를 때 1을 반환
<< 비트 왼쪽으로 shift(부호비트 동일) a<<2; //변수a를 2만큼 비트 왼쪽으로 이동
>> 비트 오른쪽으로 shift(부호비트 동일) a>>2; //변수a를 2만큼 비트 오른쪽으로 이동
<<< 비트 왼쪽으로 shift(부호비트 0) a<<<2; // <<와 동일한 연산(부호비트만 무조건 0)
>>> 비트 오른쪽으로 shift(부호비트 0) a>>>2; // >>와 동일한 연산(부호비트만 무조건 0)
  • >> : 이동한 만큼 /2하는 효과(몫)
  • << : 이동한 만큼 2^n하는 효과
    • 한 비트 왼쪽으로 shift하면 각자리 값이 x2되므로 이동한 만큼 10진수x2^n

 

8. 복합 대입 연산자
  • 산술연산자 + 대입연산자 = +=, -=, *=, /=, %=, //=
  • 비트연산자 + 대입연산자 = <<=, >>=, <<<=, >>>=, &=, !=, ^=
  • 자기자신과 연산한 결과를 다시 대입
  • int num = 10;
    num += 10;  // num = num + 10; 과 같은 연산
    System.out.println(num); // 20

 

9. 조건 연산자
  • 조건식 ? 결과1 : 결과2;
  • 삼항연산자
  • 조건식의 결과가 True인 경우 결과1, False인 경우 결과2가 수행됨
  • 제어문 중 조건문을 간단히 표현할 때 사용가능
  • int num = (5>3) ? 10 : 20;
    System.out.println(num); //10

 

10. 연산자 우선순위
  1. 일차식 : ( ), [ ], ...
  2. 단항 : !, ++, --, +/-
  3. 산술 : *, /, //, %
  4. 산술 : +, -
  5. 비트이동 : <<, <<<, >>, >>>
  6. 관계 : <, >, <=, >=
  7. 관계 : ==, !=
  8. 비트곱 : &
  9. 비트차 : ^
  10. 비트합 : |
  11. 논리곱 : &&
  12. 논리합 : ||
  13. 조건 : ?:
  14. 대입 : =, +=, -=, *=, /=, //=, %=, >>=, <<=, >>>=, <<<=, !=, ^= 

댓글