데이터를 처리하여 결과를 산출하는 것
연산식은 피연산자와 연산자를 통해 연산의 과정을 기술하며
피연산자는 연산 대상이 되는 데이터이며
연산자는 연산에 사용되는 표시나 기호를 일컫는다.
종류 | 연산자 | 피연산자수 | 산출값 타입 | 기능 설명 |
---|---|---|---|---|
산술 | + - * / % | 이항 | 숫자 | 사칙연산 및 나머지 계산 |
부호 | +/- | 단항 | 숫자 | 음수와 양수의 부호 |
문자열 | + | 이항 | 문자열 | 두 문자열의 결합 |
대입 | =, +=, -=, *=, /=, %=, &=, ^=, <<=, >>=, >>>= 등 | 이항 | 다양 | 우변의 값을 좌변에 대입 |
증감 | ++, -- | 단항 | 숫자 | 1만큼 증감 |
비교 | ==, !=, >, <, >=, <=, instanceof | 이항 | boolean | 두 값을 비교 |
논리 | !, &, & 등 | 단항, 이항 | boolean | 논리적 Not, And, OR 연산 |
조건 | (조건식)?A:B | 삼상 | 다양 | 조건식에 따라 A, B 중 하나를 선택 |
비트 | ~,&,^ 등 | 단항, 이항 | 숫자, boolean | 비트 Not, And, Or, Xor 연산 |
쉬프트 | >>, <<, >>> | 이항 | 숫자 | 비트를 좌/우로 밀어서 이동 |
연산의 순서는 연산자의 우선 순위에 따라 정해짐
이 때 동일한 우선 순위를 가지는 연산자에는 연산의 방향이 있음
산술 연산의 경우 왼쪽에서 오른쪽 방향으로 연산 수행됨
단항 연산, 부호 연산, 대입 연산은 오른쪽으서 왼쪽 방향으로 연산
연산자 | 연산방향 | 우선순위 |
---|---|---|
증감, 부호, 비트, 논리(!) | ← | 높음 |
산술 | → | |
쉬프트 | → | |
비교(<, >, <=, >=, instanceof) | → | |
비교(==, !=) | → | |
논리(&) | → | |
논리(^) | → | |
논리(or) | → | |
논리(&&) | → | |
논리(or) | → | |
조건 | → | |
대입 | ← | 낮음 |
간편 정리
1. 단항 > 이항
2. 곱셈, 나눗셈 > 덧셈, 뺄셈
3. 산술 > 비교
4. 비교 > 논리
5. 대입은 맨마지막
6. 괄호는 최우선
피연산자가 하나
+: 피연산자 부호 유지
-: 피연산자 부호 반전
피연산자 앞에 오는 경우 선 증감 후 다른 연산
피연산자 뒤에 오는 경우 다른 연산 후 증감
++: 피연산자 부호 1 증가
-- : 피연산자 부호 1 감소
!: 피연산자로 boolean만 취급하며 boolean값을 반전
~: 비트의 값을 반전(0 to 1, 1 to 0)
byte, short, long, int 타입만 취급하여 부호비트까지 반전되므로 부호가 반대인 새로운 값을 산출
byte/short -> int
피연산자가 두개
덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)
boolean 제외 모든 기본 타입에서 사용 가능함
산술 타입에서의 타입 변환
- int 보다 작은 정수 타입인 경우 int로 변환 후 연산 수행
- long 타입과 다른 정수 타입의 연산인 경우 long으로 변환 후 연산
- float/double 이 포함된 경우 float/double로 변환 후 연산
두 수를 산술 연산할 때 overflow 발생하여 잘못된 값이 발생할 수 있음
정확한 계산이 필요한 경우에는 정수를 사용하여 연산하는 것이 좋음
Nan, Infinity 연산을 주의해야함
입력된 문자열을 숫자형으로 변환할 경우에도 Nan인지 검사해야함
피연산자 중 문자열이 있다면 문자열로 결합