Operator(연산자)
1. 연산자 종류표
종류 | 구분 | 세부 구분 | 연산자 | 연산 방향 | 우선순위 |
---|---|---|---|---|---|
최우선 연산자 | 직접 접근 연산자 | ( ) . { } | 1 | ||
단항 연산자 | + - ! (자료형) ++ -- ~ | ← | 2 | ||
이항 연산자 | 산술 연산자 | * / % | → | 3 | |
+ - | 4 | ||||
시프트 연산자 | >> << >>> | 5 | |||
비교 연산자 | > < >= <= | 6 | |||
== != | 7 | ||||
논리 연산자 | 비트 논리 연산자 | & | 8 | ||
^ | 9 | ||||
| | 10 | ||||
일반 논리 연산자 | && | 11 | |||
|| | 12 | ||||
삼항 연산자 | (조건식) ? 참일때 값 : 거짓일때 값 | 13 | |||
대입 연산자 | 순수 대입 | = | ← | 14 | |
복합 대입 | 산술 대입 | += -= *= /= | |||
쉬프트 대입 | <<= >>= | ||||
비트 논리 대입 | &= ^= | | ||||
나열 연산자 | , | 15 |
- 우선순위 : 이곳에서 우선순위는 한줄의 식 안에 여러 종류의 연산자가 있을 경우 먼저 처리할 연산자의 순서를 말한다
int i = (a++) + b/ (--c/f) * (g-- - d) % (++e + h);
위 경우처럼 여러가지 수식이 섞여있을 때 연산자의 우선순위를 따라 순차적으로 계산하면 된다
다만 증감연산자는 전위연산인지 후위연산인지에 따라 식에 넣을 값이 달라지니 주의!
2. 연산자 사용법
[ 단항연산자 ]
!
: 논리부정 연산자로!(논리값)
형식으로 쓰며 논리값을 부정하여 반대값으로 변경시킨다
boolean bool1 = true;
boolean bool2 = !bool1;
System.out.println(bool2);
// -> 시스템 출력 값 false
-
++
--
: 증감연산자로 피연산자의 값에 1을 더하거나 빼준다, 붙어있는 위치에 따라 실행 순서도 바뀐다
-> 전위연산 :++(값)
먼저 연산을 진행한 후 이후 다른 연산을 진행한다
-> 후위연산 :(값)++
다른 연산들을 우선 실행 후 연산이 진행된다 -
~
: 비트 반전 연산자로 정수에만 사용되며 피연산자의 이진수 비트값 0은 1로, 1은 0으로 바꾸는 연산자
-> 부호 있는 정수 타입을 연산할 경우 부호가 반대로 변경되며, 연산 결과로 해당 정수의 1의 보수를 얻을 수 있다
ex)
~10 은 -11 으로 10의 1의 보수가 된다
~10 +1 은 -10 으로 10의 0의 보수가 된다
(두 수의 합이 N이 될 때, 이 수를 ‘N의 보수 관계’에 있다고 한다.)
[ 산술 연산자 ]
사칙연산을 비롯한 산술적인 연산
+
: 더하기-
: 빼기*
: 곱하기/
: 나누기
-> int형에서는 나누기 연산 후 나머지 소숫점 아래 값이 버려지기때문에 자동으로 몫만 남아 반환된다
-> 소숫점 아래 값까지 정확하게 알고 싶다면 실수형인 float 나 double형을 사용해야한다%
: 나누기의 나머지 값 반환
[ 비교 연산자 ]
피연산자들의 크고 작은 관계를 따지는 연산
==
: 두 피연산자 값이 같은지 비교 후 결과 값으로 true / false 를 반환한다!=
: 두 피연산자 값이 다른지 비교 후 결과 값으로 true / false 를 반환한다>
<
: 두 피연산자 값이 크거나 작은지 비교 후 결과 값으로 true / false 를 반환한다>=
<=
: 두 피연산자 값이 크거나 같은지 혹은 작거나 같은지 비교 후 결과 값으로 true / false 를 반환한다
[ 논리 연산자 ]
AND와 OR 등 참, 거짓으로 나뉘는 논리적 연산
&&
: And의 개념으로 두 피연산자가 모두 true인지 확인 후 결과 값으로 true / false 를 반환한다-
||
: Or의 개념으로 두 피연산자 중 하나라도 true인지 확인 후 결과 값으로 true / false 를 반환한다 - Dead code 의 발생
- 논리 연산자를 사용하며 앞의 조건식을 확인 후 바로 true/false값이 결정되어 버려서 뒤의 조건식이 아예 실행되지 않고 구문이 끝나게 되는 경우가 있는데 이때 뒤에 실행되지 않는 코드를 Dead code라 한다
&&
:(false)&&(조건식)
같은 경우일 때 이 코드는 앞선 조건식에서 false를 확인하면 바로 false를 반환하며 끝나버린다.||
:(true)||(조건식)
같은 경우일 때 이 코드는 앞선 조건식에서 true를 확인하면 바로 true를 반환하며 끝나버린다
[ 복합 대입 연산자 ]
+=
-=
*=
/=
%=
: 다른 연산자와 대입 연산자가 결합한 것으로 자기 자신과 연산 후 연산 결과를 자기 자신에게 누적 대입한다
-> ex)a += 10
==a = a+10
[ 삼항 연산자 ]
(조건식) ? 식1 : 식2
: 조건식의 결과값에 따라 참이면 식1 거짓이면 식2 에 해당하는 부분을 동작한다. 삼항 연산자 안에 또 삼항 연산자를 넣는 식으로 중첩하여 사용도 가능하다.
int result1 = a > b ? a++ : b--;
int result2 = a < b ? a++ : (b == 0 ? a-- : b++);
댓글남기기