Java: 연산자 operator

    Java: 연산자 operator

    2013, Jul 22    

    용어

    • 연산자(Operator): 어떠한 기능을 수행하는 기호
    • 피연산자(Operand): 연산자의 작업 대상

    연산자의 종류

    • 단항 연산자: +, -, (type), ++, --, ~, !
    • 이항 산술 연산자: +, -, *, /, %, <<, >>, >>>
    • 이항 비교 연산자: >, <, >=, <=, ==, !=
    • 이항 논리 연산자: &&, ||, &, ^, |
    • 삼항 연산자: ? :
    • 대입 연산자: =, operator=

    연산자 우선순위

    • 괄호의 우선순위가 가장 높음
    • 산술 > 비교 > 논리 > 대입
    • 단항 > 이항 > 삼항
    • 연산자의 연산 진행방향은 왼쪽에서 오른쪽
    • 단항, 대입 연산자는 오른쪽에서 왼쪽

    단항 연산자 ++ –

    • ++: 증가 연산자. 피연산자의 값 +1
    • --: 감소 연산자. 피연산자의 값 -1

    연산자의 위치에 따라 연산 우선순위가 바뀌게 되니 주의할 것.

    int n = 1;
    
    int value = n++;
    System.out.println(value); //1
    
    int n = 1;
    int value = ++n;
    System.out.println(value); //2
    

    논리 부정 연산자 !

    불리언 타입의 피연산자를 반대로 바꾼다.

    boolean flag = true;
    flag = !flag;
    System.out.println(flag);
    
    int n = 0;
    if (n != 1) {
        System.out.println("1이 아니네?");
    }
    
    -> false
    -> 1 아니네?
    

    비트 전환 연산자 ~

    정수를 2진수로 표현했을 때, 1을 0으로 0은 1로 바꾼다. 정수형에서만 사용가능

    2진수 10진수
    00001010 10
    11110101 -11
    11110101
    00000001
    -11
    +) 1
    11110110 -10
    int binary = 0b1111; // 15, 2진수 리터럴(b)
    int octal = 011; // 9, 8진수 리터럴
    int hexaDecimal = 0xE; // 14, 16진수 리터럴(x)
    
    System.out.println(~binary); // -16
    System.out.println(~octal); // -10
    System.out.println(~hexaDecimal); // -15
    
    System.out.println(~100); // -101
    

    비트 시프트 연산자 « »

    x의 비트를 n 만큼 이동시킨다. 2n 으로 곱하거나 나눈 결과와 같으며 곱셈, 나눗셈보다 연산속도가 빠르다.

    • x << n: (x * 2ⁿ과 같음)
    • x >> n: (x / 2ⁿ과 같음)
    System.out.println(8 << 2); // 8 * (2 ^ 2) = 32
    System.out.println(8 >> 2); // 8 / (2 ^ 2) = 2
    

    비트 연산자 | & ^

    피연산자를 비트단위로 연산한다. 실수형을 제외한 모든 기본형에 사용가능

    • |: OR 연산자. 피연산자 중 어느 한 쪽이 1이면 1
    • &: AND 연산자. 피연산자 양 쪽 모두 1이면 1
    • ^: XOR 연산자. 피연산자가 서로 다를 때 1
    x y x | y x & y x ^ y
    1 1 1 1 0
    1 0 1 0 1
    0 1 1 0 1
    0 0 0 0 0
    2진수 10진수  
    3 \ 5 = 7 00000011
    00000101
    3
    5
      00000111 7  
    3 & 5 = 1 00000011
    00000101
    3
    5
     
      00000001 1  
    3 ^ 5 = 6 00000011
    00000101
    3
    5
     
      00000110 6