====== 연산자 ====== ===== 연산자(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|}}