operations)은 프로그램에서 데이터를 처리하여 결과를 산출하는 것을 말한다.operator)라고 하고, operand)라고 한다expressions)이라고 한다.
연산식은 반드시 하나의 값을 산출한다.
int result = x + y;
연산식은 다른 연산식의 피연산자 위치에도 올 수 있다.
boolean result = (x+y) < 5;


산술 * 연산자가 + 연산자보다 우선순위가 높으므로 위와 같은 순서로 연산이 이뤄진다.
만약 var1와 var2를 먼저 연산하고 싶다면 ()를 사용하면 된다.
📌 연산의 방향과 우선순위 정리
- 단항, 이항, 삼항 연산자 순으로 우선순위를 갖는다.
- 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 갖는다.
- 단항과 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽이다. (
→)- 복잡한 연산식에는 괄호
()를 사용해서 우선순위를 정해준다.
단항 연산자는 피연산자가 단 하나뿐인 연산자를 말하며,
부호 연산자(+,-), 증감 연산자(++,--), 논리 부정 연산자(!), 비트 반전 연산자(~)가 있다.
+, -)양수 및 음수룰 표시하는
+,-.boolean타입과char타입을 제외한 나머지 기본 타입에 사용할 수 있다.

+, -는 산술 연산자이기도 하고, 부호 연산자이기도 하다.부호 연산자를 정수 및 실수 리터럴 앞에 붙여 양수 및 음수를 표현한다.
int i1 = +100;
int i2 = -100;
double d1 = +3.14;
double d2 = -10.5;
부호 연산자를 정수 또는 실수 타입 변수 앞에 붙일 수도 있다.
이 경우, 변수 값의 부호를 유지하거나 바꾸기 위해서 사용한다.
int x = -100;
int result1 = +x; //result1은 -100
int result2 = -x; //result2는 100
주의⭐ 부호 연산자의 산출 타입은
int타입이 된다!
short s = 100;
short result = -s; //컴파일 에러!
그래서 위와 같이 컴파일 에러가 발생한다. 다음과 같이 부호 연산자를 사용할 때는 결과를 저장할 변수를 int 타입으로 변경해야 한다.
short s = 100;
int result = -s; //result는 -100
++, --)증감 연산자는 변수의 값을 1 증가(
++)시키거나 1 감소(--)시키는 연산자를 말한다.
boolean타입을 제외한 모든 기본 타입의 피연산자에 사용할 수 있다.


증감 연산자가 변수 앞/뒤 어디든 위치해도 상관없다.
다른 연산자와 함께 사용하는 연산식에서는 증감 연산자의 위치에 따라 연산식의 결과가 다르게 나오므로 주의해야 한다.
증감 연산자가
int x = 1;
int y = 1;
int result1 = ++x + 10; //result1은 12
int result2 = y++ + 10; //result2는 11
result1은 x 값이 1 증가된 후, 10과 합쳐져서 2 + 10 = 12가 된다.result2는 y 값과 10이 합쳐져서 11이 된 후, y 값을 1 증가시킨다.!)논리 부정 연산자는
true를false로,false를true로 변경하기 때문에boolean타입에만 사용할 수 있다.

논리 부정 연산자는 조건문과 제어문에서 사용되어 조건식의 값을 부정하도록 해서 실행 흐름을 제어할 때 주로 사용한다. 또한 두 가지 상태(true/false)를 번갈아가며 변경하는 토글(toggle) 기능을 구현할 때도 주로 사용한다.
~)비트 반전 연산자는 정수 타입(
byte,short,int,long)의 피연산자에만 사용되며,
피연산자를 2진수로 표현했을 때 0을 1로, 1을 0으로 반전한다.
연산 후, 부호 비트인 최상위 비트를 포함해서 모든 비트가 반전되기 때문에, 부호가 반대인 새로운 값이 산출된다.

비트 반전 연산자를 사용할 때 주의할 점은 비트 반전 연산자 산출 타입은 int 타입이 된다는 것!
피연산자는 연산을 수행하기 전에 int 타입으로 변환되고, 비트 반전이 일어난다.
그래서 다음과 같은 코드는 컴파일 에러가 발생한다.
byte v1 = 10;
byte v2 = ~v1; //컴파일 에러
이를 해결하기 위해서는 다음과 같이 변경해야 한다.
byte v1 = 10;
int v2 = ~v1;
이항 연산자는 피연산자가 두 개인 연산자를 말하며,
산술 연산자(+,-,*,/,%), 문자열 연결 연산자(+), 대입 연산자(=,+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>=,>>>=), 비교 연산자(<,<=,>,>=,==,!=), 논리 연산자(&&,||,&,|,^,!), 비트 논리 연산자(&,|,^), 비트 이동 연산자(<<,>>,>>>) 등이 있다.
+, -, *, /, %)산술 연산자는 사칙연산인 더하기(
+), 빼기(-), 곱하기(*), 나누기(/)와 나머지 연산자(%)를 포함한 총 5개이다.

산술 연산자는 피연산자들의 타입이 동일하지 않을 경우,
다음과 같은 규칙을 사용해서 피연산자들의 타입을 일치시킨 후 연산을 수행한다.
int 타입보다 크기가 작은 타입일 경우int 타입으로 변환 후 연산을 수행한다. 따라서 연산의 산출 타입은 int이다.byte + byte → int + int = intlong 타입이 있을 경우long 타입으로 변환 후 연산을 수행한다. 따라서 연산의 산출 타입은 long이다.int + long → long + long = longfloat, double)이 있을 경우,int + double → double + double = double📌 정리
long타입을 제외한 정수 타입 연산은int타입으로 산출되고, 피연산자 중 하나라도 실수 타입이면 실수 타입으로 산출된다.
+)문자열 연결 연산자인
+는 문자열을 서로 결합하는 연산자이다.
피연산자 중 한쪽이 문자열이면 + 연산자는 문자열 연결 연산자로 사용되어 다른 피연산자를 문자열로 변환하고 결합한다.
<, <=, >, >=, ==, !=)비교 연산자는 대소 또는 동등을 비교해서
boolean타입인true/false를 산출한다.
대소 연산자는 boolean 타입을 제외한 기본 타입에 사용할 수 있고, 동등 연산자는 모든 타입에 사용될 수 있다.
비교 연산자는 흐름 제어문인 조건문(if), 반복문(for, while)에서 주로 이용되어 실행 흐름을 제어할 때 사용한다.

만약 피연산자가 char 타입이면 유니코드 값으로 비교 연산을 수행한다
비교 연산자에서도 연산을 수행하기 전에 타입 변환을 통해 피연산자의 타입을 일치시킨다.
&&, ||, &, |, ^, !)논리 연산자는 논리곱(
&&), 논리합(||), 배타적 논리합(^), 논리 부정(!) 연산을 수행한다.
논리 연산자의 피연산자는boolean타입만 사용할 수 있다.

&&와 &는 산출 결과는 같지만 연산 과정이 조금 다르다.
&&: 앞의 피연산자가 false → 뒤의 피연산자를 평가하지 않고 바로 false&: 앞의 피연산자가 false → 뒤의 피연산자까지 평가한 뒤 false즉, &&가 &보다 더 효율적으로 동작한다. ||와 |도 마찬가지이다.
논리 연산은 흐름 제어문인 조건문(if), 반복문(for, while) 등에서 주로 이용된다.
&, |, ^, ~, <<, >>, >>>)비트 연산자는 데이터를 비트(
bit) 단위로 연산하기 때문에 정수 타입만 비트 연산을 할 수 있다. (0과1로 표현이 가능)
기능에 따라 비트 논리 연산자(&,|,^,~)와 비트 이동 연산자(<<,>>,>>>)로 구분한다.

<<, >>, >>>)비트 이동(
shift) 연산자는 정수 데이터의 비트를 좌측 또는 우측으로 밀어서 이동시키는 연산을 수행한다.

=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=)대입 연산자는 오른쪽 피연산자의 값을 좌측 피연산자인 변수에 저장한다.
오른쪽 피연산자는 리터럴 및 변수, 그리고 다른 연산식이 올 수 있다.
단순히 오른쪽 피연산자의 값을 변수에 저장하는 단순 대입 연산자와 정해진 연산을 수행한 후 결과를 변수에 저장하는 복합 대입 연산자도 있다.

대입 연산자는 모든 연산자들 중에서 가장 낮은 연산 순위를 가지고 있기 때문에 제일 마지막에 수행된다.
삼항 연산자(
?:)는 세 개의 피연산자를 필요로 하는 연산자를 말한다.
삼항 연산자는?앞의 조건식에 따라 콜론(:) 앞뒤의 피연산자가 선택된다고 해서 조건 연산식이라고 부르기도 한다.

조건식을 연산하여
true가 나오면 삼항 연산자의 결과는 피연산자2가 된다.false가 나오면 삼팡 연산자의 결과는 피연산자3이 된다.