HYOJIN LIM
by HYOJIN LIM
1 min read

Categories

CH03. 연산자

  1. 연산 우선순위

    (1) 단항, 이항, 삼항 연산자 순으로 우선순위를 가진다

    (2) 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 가진다.

    (3) 단항과 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽이다. (→)

    (4) 복잡한 연산식에는 괄호() 를 사용해서 우선순위를 정해준다.

  2. 단항 연산자

    피연산자가 단 하나 뿐인 연산자

    • 부호 연산자(+/-)

    • 증감 연산자

      public class IncreaseDecreaseExample {
      	public static void main(String[] args) {
      		int x = 1;
      		int y = 1;
           
      		int res1 = ++x + 10;
      		int res2 = y++ + 10;
      		System.out.println("res1 = " + res1 + " res2 = " + res2);
      	}
      }
      

      ++i와 i=i+1은 실제로 동일한 바이트 코드가 생성되어 연산속도에는 차이가 없다.

    • 논리 부정 연산자(!)

    • 비트 반전 연산자(~)

  3. 이항 연산자

    피연산자가 두 개인 연산자

    • 산술 연산자

      • 사칙연산과 나머지 연산 총 5가지

        + 덧셈
        - 뺼셈
        ***** 곱셈
        / 나눗셈
        % 나머지
    • 문자열 연결 연산자 (+)

    • 비교 연산자

      == 두 피연산자의 값이 같은지 검사
      != 두 피연산자의 값이 다른지 검사
      > 앞에 있는 피연산자가 큰지를 검사
      >= 앞에 있는 피연산자가 크거나 같은지를 검사
      < 앞에 있는 피연산자가 작은지를 검사
      <= 앞에 있는 피연산자가 작거나 같은지를 검사
    • 논리연산자

      • boolean 값만 가질 수 있다.

        AND(&&) 피연산자가 모두 true일 경우에만 연산 결과가 true
        OR(||) 피연산자 중 하나만 true이면 연산 결과가 true
        XOR(^) 피연산자가 하나는 true이고 다른 하나가 false일 경우에만 연산 결과가 true
        NOT(!) 피연산자의 논리값을 바꿈
    • 비트 연산자

      • 0과 1로 표현이 가능한 정수 타입만 비트 연산을 할 수 있다.

        AND(&) 두 비트 모두 1일 경우에만 연산 결과가 1
        OR(|) 두 비트 중 하나만 1이면 연산 결과가 1
        XOR(^) 두 비트 중 하나는 1이고 다른 하나가 0일 경우에만 연산 결과가 1
        NOT(~) 보수
    • 비트 이동 연산자

      a « b 정수 a의 각 비트를 b만큼 왼쪽으로 이동 (빈자리는 0으로 채워진다.)
      a » b 정수 a의 각 비트를 b만큼 오른쪽으로 이동 (빈자리는 정수 a의 MSB로 채워진다.)
      a »> b 정수 a의 각 비트를 b만큼 오른쪽으로 이동 (빈자리는 0으로 채워진다.)
    • 대입 연산자 (=)

  4. 삼항 연산자

    조건식 ? 값 또는 연산식 : 값 또는 연산식

    조건식이 true이면 피연산자 2가, false이면 피연산자 3이 결과가 된다.

  5. NaN과 Infinity연산

    • 0으로 나누면 컴파일은 정상적으로 되지만, ArithmeticException(예외)이 발생한다.

    • 실수타입인 0.0 혹은 0.0f로 나누면 예외가 발생하지 않고 ‘/’ 연산의 결과는 Infinity(무한대) 값을 가지고, ‘%’연산의 결과는 NaN(Not a Number)을 가진다.

    // Infinity와 NaN 확인
       
    public class CheckInfinityAndNaNExample {
    	public static void main(String[] args) {
    		int x = 5;
    		double y = 0.0;
       
    		double z = x / y;
    		double mod = x % y;
        
    		System.out.println(Double.isInfinite(z)); // true
    		System.out.println(Double.isNaN(mod)); // true
    	}
    }