연산자(Operator)
어떠한 기능을 수행하는 기호(+,-,*,/ 등)
피연산자(Operand)
연산자의 작업 대상(변수,상수,리터럴,수식)
🔵 연산자의 종류
종류 | 연산자 | 설명 |
산술 연산자 | + - * / % << >> | 사칙 연산(+, -, *, /)과 나머지 연산(%) |
비교 연산자 | > < >= <= == != | 크고 작음과 같고 다름을 비교 |
논리 연산자 | && || ! & | ^ ~ | '그리고(AND)'와 '또는(OR)'으로 조건을 연결 |
대입 연산자 | = | 우변의 값을 좌변에 저장 |
기 타 | (type) ?: instanceof | 형변환 연산자, 삼항 연산자, instanceof연산자 |
🟠 연산자의 우선순위
1. 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다.
산술 변환
int i = 10;
float f = 20.0;
float result = f + (float)i; // 형변환으로 두 피연산자의 타입을 일치켜야한다.
float result = f + i; // float는 int보다 큰 타입이기에 형변환 연산자 생략 가능(자동 형변환)
산술 변환이란? 연산 수행 직전에 발생하는 피연산자의 자동 형변환
1️⃣ 두 연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)
float + int → float + float → float
double + float → double + double → double
2️⃣ 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.
byte + short → int + int → int
char + short → int + int → int
비교 연산자
1️⃣ 대소비교 연산자
비교연산자 | 연산결과 |
> | 좌변 값이 크면, true 아니면 false |
< | 좌변 값이 작으면, true 아니면 false |
>= | 좌변 값이 크거나 같으면, true 아니면 false |
<= | 좌변 값이 작거나 같으면, true 아니면 false |
2️⃣ 등가비교 연산자
비교연산자 | 연산결과 |
== | 두 값이 같으면, true 아니면 false |
!= | 두 값이 다르면, true 아니면 false |
논리 연산자
1️⃣ || (or) 피연산자 중 어느 한 쪽만 true 이면 true를 결과로 얻는다.
2️⃣ && (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 |
대입 연산자
op= | = |
i += 3; | i = i + 3; |
i -= 3; | i = i - 3; |
i *= 3; | i = i * 3; |
i /= 3; | i = i / 3; |
i %= 3; | i = i % 3; |
i <<= 3; | i = i << 3; |
i >>= 3; | i = i >> 3; |
i &= 3; | i = i & 3; |
i ^= 3; | i = i ^ 3; |
i |= 3; | i = i | 3; |
i *= 10 + j; | i = i * (10 + j); |
2. 단항(1) > 이항(2) > 삼항(3) 단항 연산자의 우선순위가 이항 연산자보다 높다.
단항 연산자
++ -- + - ~ ! (type)
이항 연산자
- 산술 : + - * / % << >> >>>
- 비교 : > < >= <= == !=
- 논리 : &&(and) ||(or) &(and) |(or) ^(xor)
| (or) : 피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다.
& (and) : 피연산자 중 양 쪽이 모두 1이어야만 1을 결과로 얻는다. 그 외에는 0을 얻는다.
^ (xor) : 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 때는 0을 얻는다.
쉬프트연산자 << >>
피연산자의 각 자리를 2진수로 표현했을 때 오른쪽(>>) 또는 왼쪽(<<)으로 이동시키는 연산자이다.
예시) '8 << 2'
8은 2진수로 표현했을 때 '00001000' 이다
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
8을 왼쪽으로 2자리 이동시킬때
0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
모든 자리수가 앞으로 이동하면서 1앞에 있던 0000중 앞에 00두자리는 버려지고 빈공간이 된 뒤의 2자리는 0으로 채워진다.
삼항 연산자(조건 연산자)
? :
조건식 ? 식1 : 식2 // 조건이 true이면 식1이 연산 결과가 되며, false이면 식2가 연산결과가 된다.
int x = 20;
int y = 50;
int result = 0;
x < y ? result = 70 : result = 0; // x는 y보다 작기에 result는 70이 된다.
System.out.print(result); // 70
3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.
대입 연산자
= // 비트 연산 제외