[Java의 정석] 연산자(Operator)

Shiba·2023년 5월 22일
post-thumbnail

📓 연산자(Operator)

📔 연산자와 피연산자

  • 연산자: 연산을 수행하는 기호
    (+, -, *, / ...)

  • 피연산자: 연산자의 연산 수행 대상
    (정수,실수,논리형 변수 ...)

❗ 연산자는 모든 연산결과를 반환한다.

📔 연산자의 종류

종류연산자설명
산술 연산자+, -, *, /, %사칙연산과 나머지 연산(%)
증감 연산자++, --1씩 증가 감소시키는 연산자
비교 연산자>, <, >=, <=, ==, !=크고 작음과 같고 다름을 비교
논리 연산자&&, | |, !,그리고(AND)와 또는(OR)으로 조건을 연결, 논리부정 연산자(!)
대입 연산자=오른쪽 값을 왼쪽 변수에 저장
비트 연산자&, |, ^AND(&), OR(|), XOR(^)
기타(type) ?: instanceof형변환 연산자(type), 삼항 연산자(?:), instanceof연산자

📔 연산자의 우선순위와 결합 규칙

📃 연산자의 우선순위

하나의 식연산자가 둘 이상 있을때, 어떤연산을 먼저 수행할지를 자동 결정하는것

  • 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행
  • 단항(1) > 이항(2) > 삼항(3) 연산자 순으로 우선순위가 높다.

📃 연산자의 결합 규칙

우선순위가 같은 연산자가 있을때,
대입,단항 연산자를 제외한 모두 왼쪽에서 오른쪽으로 연산(->)

  • (3 + 4 - 5) => (3+4) - 5 => 7 - 5 => 2
  • (x = y = 3) = x => ( y = 3 ) => x = y(3) => x = 3

📔 사칙 연산자와 산술변환

📃 사칙 연산자

  • +(덧셈), -(뺄셈), *(곱셈), /(나눗셈)
  • 나눗셈을 할때, 정수형일때는 값손실이 발생할 수도 있음.
    • int / int = int로 나오기때문

📃 산술변환

연산 전피연산자의 타입일치시키는 것.

  1. 두 피연산자의 타입을 같게 일치시킨다. (보다 큰 타입으로 일치)
        long + int -> long + long -> long
        float + int -> float + float -> float

  2. 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.
        byte + short -> int + int -> int
        char + short -> int + int -> int
        '2'(char) - '0'(char) -> 50(int) + 48(int) -> 2(int)

📔 반올림(Math.round), 나머지 연산자

📃 반올림(Math.round)

실수를 소수점 첫 째자리에서 반올림한 정수를 반환

long result = Math.round(4.52);
long result = 5;

📃 나머지 연산자(%)

오른쪽 피연산자로 나누고 남는 나머지를 반환

나누는 피연산자0이 아닌 정수만 허용 (부호는 무시됨)

  • 10 % 8 == 10 % (-8) == 2

📔 증감 연산자, 부호 연산자

📃 증감 연산자

  • 증가 연산자(++) + 감소 연산자(--)
  • 피연산자의 값1 증가(++), 감소(--)시키는 연산자
  • 전위형, 후위형
타입설명사용예
전위형값이 참조되기 전에 증가(감소)시킨다j = ++(--)i;
후위형값이 참조된 후에 증가(감소)시킨다j = i++(--);

❗ 증감 연산자가 독립적으로 사용된 경우, 전위형과 후위형의 차이가 없다!

📃 부호 연산자(단항 연산자)

  • '-'피연산자의 부호반대로 변경
  • '+'는 아무런 일도 하지않음.(사용X)

📔 비교 연산자, 문자열의 비교

📃 비교 연산자

피연산자를 비교해서 true(참) 또는 false(거짓)반환

        🔻 대소비교 연산자의 종류와 결과

비교연산자연산결과
>좌변 값이 크면, true. 아니면 false.
<좌변 값이 작으면, true. 아니면 false.
>=좌변 값이 크거나 같으면, true. 아니면 false.
<=좌변 값이 작거나 같으면, true. 아니면 false.

   🔻 등가비교 연산자의 종류와 결과

비교연산자연산결과
==두 값이 같으면, true. 아니면 false.
!=두 값이 다르면, true. 아니면 false.

📃 문자열의 비교

문자열의 비교에는 ==대신 equals()를 사용해야 한다.

동등성과 동일성의 차이 -나중에 배움

📔 논리 연산자

📃 논리 연산자

조건식연결할 때 사용하는 연산자

  • | |(OR) : 피연산자 중 어느 한쪽이라도 true이면 true.

      i % 2 == 0 || i % 3 == 0 //(i는 2또는 3의 배수)
  • &&(AND) : 피연산자 양쪽 모두 true이어야 true.

      10 < x && x < 30 // 10 < x < 30 (x는 10보다 크고 30보다 작다)
  • | |, && 가 섞여있는 경우괄호를 통해 연산 순서를 명확하게 하도록 하자.

    ('a' <= ch <= 'z') || ('A' <= && ch <= 'Z') // 문자 ch는 대문자 또는 소문자이다.

📃 논리 부정 연산자(!)

true -> false로, false -> true로 바꾼다.

  boolean b = true;  
  !b == false;

📔 조건 연산자, 대입연산자

📃 조건 연산자(? :)

조건식의 결과에 따라 연산결과를 달리한다.

반환받을 변수 = (조건식)? 식1(참일때):식2(거짓일때)

  result = (x>y)? x : y ; //( x가 y보다 크면 x를, 아니라면 y를 반환.)
  /*
  => if(x>y)
		return x;
	else
		return y;
  */

📃 대입연산자(=)

오른쪽 피연산자왼쪽 피연산자저장 후 저장된 값을 반환.

  • lvalue, rvalue

    • lvalue - 대입 연산자의 왼쪽 피연산자. 저장공간이여야함.(변수, 배열)
    • rvalue - 대입 연산자의 오른쪽 피연산자.
  • 복합 대입 연산자

    대입 연산자와 다른 연산자를 하나로 축약

    op==
    i += 3;i = i + 3;
    i -= 3;i = i - 3;
    i *= 3;i = i * 3;
    i /= 3;i = i / 3;
    i <<= 3;i = i << 3;
    i >>= 3;i = i >> 3;
    i &= 3;i = i & 3;
    i ^= 3;i = i ^ 3;
    i |= 3;i = i | 3;
    i *= 3 + j;i = i * (3 + j);

📔 형변환 연산자

📃 형변환이란,

  • 변수 또는 상수의 타입다른 타입으로 변환하는 것
  • boolean을 제외한 나머지 기본형서로 형변환이 가능하다.

📃 형변환 연산자

  • (type)피연산자
      int score = (int)85.4;
      // => int score = 85;
변 환수 식결 과
int -> char(char)65'A'
char -> int(int)'A'65
float-> int(int)1.6f1
int -> float(float)1010.0f
  • 자동 형변환

    기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다.

    • '큰 범위 = 작은 범위' 이면 자동으로 형변환.
      • float f = 1234; -> 범위가 넘지않으므로 자동으로 형변환!

    • '작은범위 = 큰 범위' 이면 에러! (값손실이 발생하기 때문)
      • int i = 3.14f -> float범위가 int 보다 넓으므로 에러!
      • 예외) byte b = 100; (정수 리터럴이 byte범위를 넘지않아서 에러X)
profile
모르는 것 정리하기

0개의 댓글