연산자 & 피연산자

연산자

  • 연산을 수행하는 기호

  • 종류

    • 산술 연산자 : 사칙연산과 나머지 연산

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

        나눗셈 연산자 ( / )

        • 정수형 피연산자를 0으로 나누면 에러가 발생한다
        • 두 피연산자가 모두 int일 경우 연산결과 역시 int타입이다.
          ( 10 / 4 가 2가 나오는 이유 소수점아래는 버려진다)
        • 피연산자 중 1개 이상이 실수형일 경우 실수형의 값을 결과로 얻는다
          ( int보다 float가 범위가 넓기 때문에 자동 형변환이 된다. )

        나머지 연산자

        • 나누고 난 나머지 값을 결과로 반환한다 오른쪽 피연산자에 0은 사용할 수 없다
        • 주로 배수 검사에 사용된다
        • 나누는 수로 음수도 가능하지만 부호가 무시된다 (절대값으로 나눈 나머지)

      산술 변환

      • 연산 전에 피연산자 타입을 일치하기 위해 자동 형변환 되는것을 산술 변환이라고 한다
      1. 피연산자들의 타입을 큰 타입의 타임으로 같게 일치시킨다.
      2. 피연산자들의 타입이 int보다 작을 경우는 int로 변환시킨다.
        (오버플로우가 발생할 가능성이 있기 때문이다)

      오버플로우

      • 연산과정에서 타입이 표현할 수 있는 값의 범위를 넘어가는 것
        ( 최대값 + 1 은 최소값이 되고 최소값 - 1 는 최대값이 된다 )
    • 비교 연산자 : 크고 작음과 같고 다름을 비교
      > , < , >= , <= , == , !=

      대소비교 연산자

      • >, <, >=, <=
        비교한 뒤 참이면 true 거짓이면 false를 결과로 반환한다
        boolean을 제외한 기본형 자료형에 다 사용할 수 있다 ( 참조형은 X )

      등가비교 연산자

      • ==, !=
        값이 같은지 다른지를 비교한다 ( 모든 자료형에 사용가능하다 )
      • 두 문자열을 비교할 때는 == 대신 equals()라는 메서드를 사용한다
        (대소문자를 구별하지 않고 비교할 때는 equalsIgnoreCase() 사용)
  • 논리 연산자 : and, or 로 둘 이상의 조건을 연결
    && , ||

    || ( or결합 ) : 피연산자 중 한쪽만 true만 true를 결과로 얻는다
    && ( and결합 ) : 피연산자 중 양쪽 모두 true여야 true를 결과로 얻는다

  • 논리 부정 연산자 : true와 false를 반대로 바꾸는 연산자
    !

  • 비트 연산자
    >> , << , & , |

    • << : 왼쪽 피연산자의 각 비트를 오른쪽 피연산자 만큼 왼쪽으로 이동시킵니다
      (빈자리는 0으로 채워집니다.)
    • >> : 왼쪽 피연산자의 각 비트를 오른쪽 피연산자 만큼 오른쪽으로 이동시킵니다
      (빈자리는 왼쪽 피연산자의 최상위 부호비트와 같은 값으로 채워집니다.)
    • >>> : 왼쪽 피연산자의 각 비트를 오른쪽 피연산자 만큼 오른쪽으로 이동시킵니다
      (빈자리는 0으로 채워집니다.)
    • & (and) : 두 비트 모두 1일 경우에만 연산 결과가 1
    • | (or) : 두 비트 중 하나만 1일 경우에만 연산결과가 1
    • ^ (xor) : 두 비트중 하나는 1이고 다른 하나가 0일경우에만 연산결과가 1
    • ~ (not) : 비트를 반전시킨다 1은 0으로 0은 1로 (보수)
  • 조건 연산자 : 조건식, 식1, 식2 모두 세 개의 피연산자를 필요로하는 상항 연산자
    result = (x>y) ? x : y; // x > y 가 참이면 result에 x값 저장 거짓이면 y값 저장

  • 대입 연산자 : 우변의 값을 좌변에 저장
    =

    • lvalue = rvalue
      lvalue에는 값을 변경할 수 있는 것이 와야한다.
    • 연산방향이 오른쪽에서 왼쪽이다
  • 복합 대입 연산자 : 대입연산자앞에 다른 연산자가 와서 결합되는 경우
    += , -= , *=, /= , %= , <<= , >>= , &= , ^= , |=

    오른쪽 피연산자의 결과 값을 결합된 연산자와 연산한 결과를 왼쪽 피연산자에 대입

    • x += 1 ( x = x + 1 )
    • x -= 1 ( x = x - 1 )
    • x *= 1 ( x = x * 1 )
    • x /= 1 ( x = x / 1 )
    • x *= 10 + y ( x = x * ( 10 + y ) )
  • 증감 연산자 : 값을 1증가 또는 1 감소
    ++, --

    전위형과 후위형

    • 전위형
      피연산자의 왼쪽에 위치한다 j = ++i;
      값이 참조되기 전에 증가시킨다.
    • 후위형
      피연산자의 오른쪽에 위치한다 j = i++;
      값이 참조된 후에 증가시킨다.
int i = 10, j = 0;
j = i++;
//출력 : j = 10, i = 11;
int i = 10, j = 0;
j = ++i;
//출력 : j = 11, i = 11;
  • 부호 연산자
    - : 피연산자의 부호를 반대로 변경한다

  • 형변환 연산자

    • (변환할타입)피연산자

    • 피연산자의 값을 지정된 타입으로 변환해서 결과만 반환한다 피연산자의 값은 변화가 없다

    • 컴파일러가 생략된 형변환을 자동적으로 해주는 경우가 있는데 이 때는 표현범위가 좁은타입에서 넓은 타입으로 형변환 하는 경우다 ( 값 손실이 없기 때문에 )

      byte -> short -> int -> long -> float -> double
      char -> int
      반대로 형변환 되는 경우에는 형변환 연사자를 반드시 써야한다.

  • 연산자의 우선순위
    • 연산자가 2개 이상인 경우 연산자의 우선순위에 의해 연산순서가 결정된다

피연산자

  • 연산의 대상

  • 피연산자의 개수에 따라 연산자를 분류하기도 한다

    • 1개면 단항 연산자, 두개면 이항 연산자, 세개면 삼항 연산자라고 한다.

    • 부호 연산자의 -와 뺄셈 연산자의 -를 피연산자의 개수로 구분할 수 있다

좋은 웹페이지 즐겨찾기