====== 연산자 ======
===== 연산자(Operator)란? =====
^ 연산자(Operator) | 어떠한 기능을 수행하는 기호(+,-,*,/ 등) |
^ 피연산자(Operand) | 연산자의 작업 대상(변수,상수,리터럴,수식) |
- 어떠한 기능을 수행하는 기호를 말합니다.
- 예를 들면 +는 덧셈’이라는 기능을 수행하는 기호죠.
- 피연산자는 연산자의 작업대상을 말합니다.
- 예를 들어 a + b라는 식이 있다고 할 때, \\ +는 연산자이고, 연산자가 덧셈을 수행할 대상인 a와 b는 피연산자입니다.
===== 연산자의 종류 =====
=== ===
^ 단항연산자 | : + - (타입) ++ -- ~ ! |
^ 이항연산자 | 산술 : + - * / % <''''< >''''> >''''>''''> \\ 비교 : > < >''''= <''''= == != \\ 논리 : && ''||'' & ''^'' |
^ 삼항연산자 | ? : |
^ 대입연산자 | = |
===== 연산자 우선순위 =====
- 괄호의 우선순위가 제일 높다.
- 산술 > 비교 > 논리 > 대입
- 단항 > 이항 > 삼항
- 연산자의 연산진행방향은 왼쪽에서 오른쪽이다.( -> ) \\ 예외적으로 단항,대입연산자만 오른쪽에서 왼쪽( <- ) 이다. \\ {{:study:java:javachobo:java_operator_prioritize.png|}}
- 연산자의 우선순위를 정리한 표입니다.
- 우선순위가 높은 것 부터 낮은 것의 순으로 되어 있습니다. \\ 같은 줄의 연산자들은 우선순위가 같습니다.
- 우선순위가 높은 것 부터 낮은 것 순으로 나열하면
- 단항, 이항, 삼항, 대입 연산자의 순입니다.
- 이항 연산자 중에는 산술, 비교, 논리 연산자의 순입니다.
- 우선순위 뿐만아니라 연산방향에 대해서도 알아두셔야 합니다.
- 연산방향은 같은 우선순위의 연산이 있을때 연산을 수행하는 방향을 말합니다.
- 단항과 대입연산자를 제외하고는 연산진행방향이 오른쪽에서 왼쪽입니다
==== 예제 ====
=== ===
^ 단항 > 이항 | -x + 3 |
^ 곱셈,나눗셈 > 덧셈, 뺄셈 | x + 3*y |
^ 산술 > 비교 | x+3 > y-2 |
^ 비교 > 논리 | x>3 && x<5 |
^ 대입은 항상 맨 끝에 | int i = x + y*3 |
==== 주의사항 ====
- <''''<, >''''>, >''''>''''>는 덧셈연산자보다 우선순위가 낮다. \\ x <''''< 2 + 1 : x <''''< (2 + 1) 과 같다.
- ||, |(OR)는 &&, &(AND)보다 우선순위가 낮다. \\ x < -1 || x > 3 && x < 5 : x < -1 || (x > 3 && x < 5) 와 같다.
===== 증감연산자(++,--) =====
=== ===
^ 증가연산자(++) | 피연산자의 값을 1 증가시킨다. |
^ 감소연산자(-''''-) | 피연산자의 값을 1 감소시킨다. |
- int i = 5 , j = 0 ;
^ 전위형 | j = ++i; | ++i; \\ j = i; | 값이 참조되기 전에 증가시킨다 | j=6 \\ i=6 |
^ 후위형 | j = i++; | j = i; \\ ++i; | 값이 참조된 후에 증가시킨다 | j=5 \\ i=6 |
===== 부호연산자(+,-)와 논리부정연산자 =====
=== ===
^ 부호연산자(+,-) |‘+’는 피연산자에 1을 곱하고 \\ ‘-’는 피연산자에 -1을 곱한다 |
^ 논리부정연산자(!) | true는 false로, false는 true로 \\ 피연산자가 boolean일 때만 사용가능 |
===== 비트전환연산자(~) =====
- 정수를 2진수로 표현했을 때, 1을 0으로 0은 1로 바꾼다.
- **정수형에만 사용가능.** \\ {{:study:java:javachobo:java_binary.png|}}
- 10 -> -10 \\ ~10 -> -11
===== 이항연산자의 특징 =====
** 이항연산자는 연산을 수행하기 전에 피연산자의 타입을 일치시킨다. **
- int보다 크기가 작은 타입은 int로 변환한다.
- byte, char, short → int
- 피연산자 중 표현범위가 큰 타입으로 형변환 한다.
- byte + short → int + int → int
- char + int → int + int → int
- float + int → float + float → float
- long + float → float + float → float
- float + double → double + double → double
===== 나머지 연산자(%) =====
- 나누기한 나머지를 반환한다.
- 홀수, 짝수 등 배수검사에 주로 사용.
- int remain = 10 % 8 ; \\ remain 에 나머지 2값이 들어간다.
- 나머지 연산자 예제
10 % 8 → 2
10 % -8 → 2
-10 % 8 → -2
-10 % -8 → -2
===== 쉬프트 연산자(<<,>>,>>>) =====
- 2n으로 곱하거나 나눈 결과를 반환한다.
- 곱셈, 나눗셈보다 빠르다.
- x <''''< n 은 x * 2n과 같다. 8 << 2 는 8 * 22과 같다.
- x >''''> n 은 x / 2n과 같다. 8 >> 2 는 8 / 22과 같다.
===== 비교연산자(>,<,>=,<=,==,!=) =====
- 피연산자를 같은 타입으로 변환한 후에 비교한다. \\ 결과 값은 true 또는 false이다.
- 기본형(boolean제외)과 참조형에 사용할 수 있으나 \\ 참조형에는 ==와 !=만 사용할 수 있다. \\ {{:study:java:javachobo:java_diff_oper.png|}}
==== 예제 ====
- ‘A’ < ‘B’ → 65 < 66 → true
- ‘0’ == 0 → 48 == 0 → false
- ‘A’ != 65 → 65 != 65 → false
===== 비트연산자(&,|,^) =====
- 피연산자를 비트단위로 연산
- 실수형(float, double)을 제외한 모든 기본형에 사용가능
=== ===
^ OR연산자 ^ ''|'' | 피연산자 중 어느 한 쪽이 1이면 1이다. |
^ AND연산자 ^ & | 피연산자 양 쪽 모두 1이면 1이다. |
^ XOR연산자 ^ ''^'' | 피연산자가 서로 다를 때 1이다. |
^ x ^ y ^ x ''|'' y ^ x & y ^ x ''^'' y ^
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 0 | 1 |
| 0 | 0 | 0 | 0 | 0 |
{{:study:java:javachobo:java_bit_oper.png|}}
===== 논리연산자(&&,||) =====
- 피연산자가 반드시 boolean이어야 하며 연산결과도 boolean이다.
- &&가 || 보다 우선순위가 높다. \\ 같이 사용되는 경우 괄호를 사용한다.
=== ===
^ OR연산자 ^ ''||'' | 피연산자 중 어느 한 쪽이 true이면 true이다. |
^ AND연산자 ^ && | 피연산자 양 쪽 모두 true이면 true이다. |
^ x ^ y ^ x ''||'' y ^ x && y ^
| true | true | true | true |
| true | false | true | false |
| false | true | true | false |
| false | false | false | false |
===== 삼항연산자(? :) =====
(조건식) ? 식1 : 식2
- 조건식의 연산결과가 \\ **true이면 ‘식1’의 결과**를 반환하고 \\ **false이면 ‘식2’의 결과**를 반환한다.
- 예제
int x = -10;
int absX = x >= 0 ? x : -x;
아래의 조건문과 동일하다.
if(x>=0) {
absX = x;
} else {
abxX = -x;
}
===== 대입연산자(=,op=) =====
- 오른쪽 피연산자의 값을 왼쪽 피연산자에 저장한다. \\ **단, 왼쪽 피연산자는 상수가 아니어야 한다.** \\ {{:study:java:javachobo:java_input_oper.png|}}