Java 연산자(Operator)

Coding-Luizy·2022년 7월 31일
0

java

목록 보기
4/9
post-thumbnail

후기

여태까지 명확하지는 않지만 직관적으로 다뤄왔던 연산자 우선순위를 확실히 알게 되었다.
연산순위가 헷갈릴때는 ()를 이용해 직관적으로 연산순위를 지정해줄테지만 긴가민가(?) 한 부분을 확실히해서
개운한 기분이었다.
또한, 피연산자들이 상수, 변수, 리터럴이냐에 따라 다르게 적용된다는점을 알게 되었다.
새롭게 알게되거나 헷갈릴만한 내용들만 정리했다.


연산자의 종류

종류 연산방향 연산자 우선순위
단항 연산자 <- ++ -- + - ~ ! (타입) 높음
산술 연산자 -> * / %
-> + -
-> << >> >>>
비교 연산자 -> < > <= >= instanceof
-> == !=
논리 연산자 -> &
-> ^
-> |
-> &&
-> ||
삼항 연산자 -> ?:
대입 연산자 <- = (op)= 낮음

산술변환

  • 쉬프트 연산자( << , >> ), 증감 연산자( ++ , -- )를 제외하고는 모든 연산에서 산술변환이 일어난다.
  • 산술변환은 피연산자들의 자료형이 다를때, 큰 자료형으로 피연산자의 자료형을 변화한다.
  • byte, char, short는 연산시에 int형으로 변환된다.

단항 연산자

증감 연산자 ++ --

  1. 전위형
    ++variable
    --variable
    피연산자값을 1 증감킨 후 연산한다.
  2. 후위형
    variable++
    variable--
    피연산자값이 참조된 후 1 증감시킨다.
  • char += 1; != char++;
    char은 연산자를 만났을때 int형으로 산술변환되지만, 증감연산자를 만났을때는 산술변환되지않고 char을 유지한다.

부호연산자 + -

boolean, char을 제외한 기본형에 부호를 결정한다

이항 연산자

산술 연산자 + - * / %

char c1 = 'a';
char c2 = c1 + 1; //컴파일 오류발생
char c3 = 'a' + 1; //컴파일 오류없음.

c2는 rvalue가 int형으로 산술변환되어 char 자료형에 대입이안된다.
c3는 rvalue가 리터럴로만 되어있어 컴파일시에 미리 계산되어 'b'로 되기 때문에 문제가 없다.

  • 실수형이 정수형이되면 소수점 아래가 사라진다.

비교 연산자 < > <= >=

0.1f != 0.1d;

float와 double는 2진수로 표현된 가장 가까운수를 저장하는데, 정밀도 차이때문에 실제 저장되는값이 다르다.

논리 연산자 && || !

&& : 합연산(AND)
|| : 곱연산(OR)
! : 논리부정
논리 연산자의 연산방향은 ->이다.
따라서, 합연산시에 좌측 피연산자가 true면 우측 피연산자 값을 확인하지 않고 true를 반환
곱연산시에 죄측 피연산자가 false면 우측 피연산자 값을 확인하지 않고 false 반환

  • 합연산시 true일 확률이 높은값을 좌측에, 곱연산시 false일 확률이 높은값을 좌측에 두자.

비트 연산자 & | ^ ~ << >>

& : 합연산(AND)
| : 곱연산(OR)
^ : XOR연산 (결과가 다르면 1, 같으면 0)

  • XOR연산자 ^ 는 간단한 암호화에 사용된다. 같은값으로 두번 ^ 하면 원래값이 나온다.

~ : 비트 전환 연산자
>> : 우측 쉬프트 (2^n 만큼 나눈값)
<< : 좌측 쉬프트 (2^n 만큼 곱한값)

삼항 연산자

조건 연산자

파이썬 조건문 공부할때 정리했던 C언어의 조건연산자와 동일하다.

boolean condition;
condition ? x : y;

이때, x,y 사이에서 산술변환이 발생한다.

profile
Better Tomorrow

0개의 댓글

관련 채용 정보