변수에 값을 대입하는 연산자 ex) int age = 24;
+: 변수나 상수 값을 양수로 만든다.
-: 변수나 상수 값을 음수로 만든다
int num = 10;
System.out.println(+num); // 10
System.out.println(-num); // -10
System.out.println(num); // 10
num = -num; // 음수로 변경
System.out.println(num); // -10
+: 두 항을 더한다.
-: 앞에 있는 항에서 뒤에 있는 항 빼기
*: 두 항을 곱한다.
/: 앞에 있는 항에서 뒤에 있는 항 나누어 몫 구하기
%: 앞에 있는 항에서 뒤에 있는 항 나누어 나머지 구하기
int mathScore = 90;
int engScore = 70;
int totalScore = mathScore + engScore;
System.out.println(totalScore); // 160
double avgScore = totalScore / 2.0;
System.out.println(avgScore); // 80.0
++: 항의 값에 1을 더한다.
--: 항의 값에 1을 뺀다.
int gameScore = 150;
int lastScore1 = ++gameScore;
System.out.println(lastScore1); // 151;
int lastScore2 = --gameScore;
System.out.println(lastScore2); // 150
int value = 10;
int num = ++value;
System.out.println(num); // 11
int num2 = value++;
System.out.println(num2); // 11
>: 왼쪽 항이 크면 참, 아니면 거짓 반환
<: 오른쪽 항이 크면 참, 아니면 거짓 반환
>=: 왼쪽 항이 크거나 같으면 참, 아니면 거짓 반환
<=: 오른쪽 항이 크거나 같으면 참, 아니면 거짓 반환
==: 두 개 항의 값이 같으면 참, 아니면 거짓 반환
!=: 두 개 항이 다르면 참, 아니면 거짓 반환
int myAge = 28;
boolean value = (myAge > 25);
System.out.println(value); // true
&&: 두 항이 모두 참인 경우에만 결과 값이 참, 그렇지 않으면 거짓
||: 두 항 중 하나의 항만 참이면 결과 값은 참, 두 항 모두 거짓이면 결과 값은 거짓
!: 단항 연산자로, 참인 경우는 거짓으로 변경하고, 거짓인 경우는 참으로 변경
int num1 = 10;
int num2 = 20;
boolean flag = (num1 > 0) && (num2 > 0);
System.out.println(flag); // flag는 참
flag = (num1 < 0) && (num2 > 0);
System.out.println(flag); // 거짓
flag = (num1 < 0) || (num2 > 0);
System.out.println(flag); // 참
❗️단락 회로 평가: 논리 연산에서 모든 항이 실행되지 않는 경우
int num1 = 10;
int i = 2;
// ((i = i + 2) < 10)은 실행되지 않음! 앞의 식이 이미 false 이므로
boolean value = ((num1 = num1 + 10) < 10) && ((i = i + 2) < 10);
System.out.println(value); // false
System.out.println(num1); // 20
System.out.println(i); // 2
// ((i = i + 2) < 10)은 실행되지 않음! 앞의 식이 이미 true 이므로
value = ((num1 = num1 + 10)) > 10 || ((i = i + 2) < 10);
System.out.println(value); // true
System.out.println(num1); // 30
System.out.println(i); // 2
| 연산자 | 기능 |
|---|---|
| += | 두 항의 값을 더해서 왼쪽 항에 대입 |
| -= | 왼쪽 항에서 오른쪽 항을 뺴서 그 값을 왼쪽 항에 대입 |
| *= | 두 항의 값을 곱해서 왼쪽 항에 대입 |
| /= | 왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입 |
| %= | 왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입 |
| <<= | 비트를 왼쪽으로 이동하고 그 값을 왼쪽 항에 대입 |
| >>= | 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입(왼쪽에 채워지는 비트는 부호 비트와 동일) |
| >>>= | 비트를 오른쪽으로 이동하고 그 값을 왼쪽항에 대입(왼쪽에 채워지는 비트는 0) |
| &= | 두 항의 & 비트 연산 후 그 값 왼쪽 항에 대입 |
| |= | 두 항의 | 비트 연산 후 그 값 왼쪽 항에 대입 |
| ^= | 두 항의 ^ 비트 연산 후 그 값 왼쪽 항에 대입 |
조건식 ? 결과 1 : 결과 2
조건식이 참이면 결과 1, 조건식이 거짓이면 결과 2 선택
두 개의 비트 값이 모두 1인 경우에만 연산의 결과 값이 1이됨
두 개의 비트 값이 하나라도 1이면 연산 결과 값이 1이 됨
같은 값이면 0, 다른 값이면 1
비트 값을 0은 1로, 1은 0으로 바꾸는 연산
왼쪽으로 비트 이동하는 연산자
int num = 5; // 0 0 0 0 0 1 0 1
num << 2; // 0 0 0 1 0 1 0 0
오른쪽으로 비트 이동하는 연산자
int num = 10; // 0 0 0 0 1 0 1 0
num >> 2; // 0 0 0 0 0 0 1 0
오른쪽으로 비트 이동하는데, 왼쪽에 채워지는 비트값이 무조건 0
| 우선순위 | 형 | 연산자 | 연산방향 |
|---|---|---|---|
| 1 | 일차식 | ()[]. | -> |
| 2 | 단항 | ! ++ -- + - | <- |
| 3 | 산술 | % / * | -> |
| 4 | 산술 | + - | -> |
| 5 | 비트 이동 | << >> | -> |
| 6 | 관계 | < > <= >= | -> |
| 7 | 관계 | == != | -> |
| 8 | 비트 곱 | & | -> |
| 9 | 비트 차 | ^ | -> |
| 10 | 비트 합 | | | -> |
| 11 | 논리 곱 | && | -> |
| 12 | 논리 합 | || | -> |
| 13 | 조건 | ?: | -> |
| 14 | 대입 | = += -= *= %= /= | <- |