프로그램에서 데이터를 처리하여 결과를 산출하는 것 = 연산
연산자는 피연산자를 연산해서 값을 산출하는데, 산출되는 값의 타입은 연산자별로 다르다.
산술연산자일 경우, 숫자 타입(byte, short, int, long, float, double)
비교 연산자와 논리 연산자는 논리타입(boolean)
의 결과값이 나온다.
연산자 종류 | 연산자 | 피연산자 수 | 산출값 | 기능 |
---|---|---|---|---|
산술 | +,-,*,/,% | 이항 | 숫자 | 사칙연산 및 나머지 계산 |
부호 | +,- | 단항 | 숫자 | 음수와 양수의 부호 |
문자열 | + | 이항 | 문자열 | 두 문자열을 연결 |
대입 | =,+=,-=,*=,/=,%= | 이항 | 다양 | 우변의 값을 좌변의 변수에 대입 |
증감 | ++,-- | 단항 | 숫자 | 1만큼 증가/감소 |
비교 | ==,!=,>,<,>=,<=,instanceof | 이항 | boolean | 값의 비교 |
논리 | ^,!,&,|,&&,|| | 단항, 이항 | boolean | 논리 부정, 논리곱, 논리합 |
조건 | (조건식)?A:B | 삼항 | 다양 | 조건식에 따라 A 또는 B 중 하나를 선택 |
instanceof
- 객체타입 확인하는 연산자
-> 상속관계에서 부모객체인지 자식객체인지 확인
| 와 & : 비트연산자
- | : 둘 중 하나라도 1이 있으면 결과는 1
- & : 둘 다 1이어야 결과도 1
XOR 연산자(^) = 배타적(exclusive) OR = 배타적 논리합 => A ^ B
- 두 피연산자가 다르면 true, 같으면 false
- F XOR F = F, F XOR T = T, T XOR F = T, T XOR T = F
연산식은 반드시 하나의 값을 산출한다.
따라서 하나의 값이 올 수 있는 곳이면 어디든지 값 대신 연산식을 사용할 수 있다.
또한 연산식은 피연산자 위치에 올 수도 있다.
boolean result = (x+y) <5
x>0 && y<0
위 연산식에서는 <,> 연산자가 먼저 처리될까? 아니면 && 연산자가 먼저 처리될까?
&&보다는 >,<의 우선순위가 높기때문에 x>0 와 y<0이 먼저 처리되고, 해당 산출값으로 &&를 연산한다.
그럼 우선순위가 같은 연산자들끼리는 어떤 순서로 처리될까?
이 경우에는 연산의 방향따라 다르다, 대부분 연산자는 왼쪽에서 오른쪽 방향으로 연산을 수행한다.
예를들어, 100*2/3%5
이 식에서 *,/,%는 같은 우선순위를 갖고있기때문에 왼쪽에서 오른쪽 방향으로 연산된다.
대부분 연산자는 왼쪽에서 오른쪽 방향이지만, 단항 연산자(++,--,!,~), 부호 연산자(+,-), 대입 연산자(=,+=,-=,...)는 오른쪽에서 왼쪽 방향으로 연산을 수행한다.
예를들어 a=b=c=5
의 연산식은 c=5, b=c, a=b 순서로 실행된다.
이와 같이 어떤 연산자를 사용하느냐에 따라 연산의 방향과 우선순위가 결정되기 때문에 복잡한 연산식에서는 주의가 필요하다.
그래서 괄호 () 를 사용해서 먼저 처리해야 할 연산식을 묶어주는게 좋다.
괄호 부분은 연산에서 최우선순위를 갖는다.
- 정리! 연산의 방향과 우선순위
- 단항, 이항, 삼항 연산자 순으로 우선순위를 갖는다.
- 산술, 비교, 논리, 조건, 대입 연산자 순으로 우선순위를 갖는다.
- 단항(논리 연산자 중에서는 '!' 등등), 부호, 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽이다.
- 복잡한 연산식에는 괄호는 사용해서 우선순위를 정한다.
출처
혼자공부하는 자바