- 연산자와 피연산자란?
- 연산자 : 덧셈, 뺄셈처럼 계산할 기호
- 피연산자 : 연잔자로 인해 계산되어지는 숫자
- 연산자 종류
산술 연산자 | + - * / % << >> | 사칙 연산과 비트연산 |
비교 연산자 | > < >= <= == != | 크고 작음과 같고 다름을 비교 |
논리 연산자 | && || | 그리고(AND)와 또는(OR)으로 조건을 연결 |
대입 연산자 | = ++ -- | 우변의 값을 좌변에 저장, 연산 복합대입 |
기타 연산자 | (type) ?: instance of | 형변환 연산자, 삼항 연산자, instance of 연산자 |
- 논리 연산자
&& (AND = 피연산자 모두 참), || (OR = 피연산자 둘중 하나라도 참), ! (피연산자의 반대 boolean값)
// 논리 연산자
boolean flag1 = true;
boolean flag2 = true;
boolean flag3 = false;
System.out.println(flag1); // true
System.out.println(flag2); // true
System.out.println(flag3); // false
// 피연산자 중 하나라도 true 이면 true
System.out.println(flag1 || flag2); // true
System.out.println(flag1 || flag2 || flag3); // true
// 피연산자 모두 true 이면 true
System.out.println(flag1 && flag2); // true (flag1, flag2 모두 true 라서)
System.out.println(flag1 && flag2 && flag3); // false (flag3은 false 라서)
// And 연산
System.out.println((5 > 3) && (3 > 1)); // 5 는 3 보다 크고, 3 은 1 보다 크다 (true)
System.out.println((5 > 3) && (3 < 1)); // 5 는 3 보다 크고, 3 은 1 보다 작다 (false)
// Or 연산
System.out.println((5 > 3) || (3 > 1)); // 5 는 3 보다 크거나, 3 은 1 보다 크다 (true)
System.out.println((5 > 3) || (3 < 1)); // 5 는 3 보다 크거나, 3 은 1 보다 작다 (true)
System.out.println((5 < 3) || (3 < 1)); // 5 는 3 보다 작거나, 3 은 1 보다 작다 (false)
// System.out.println(1 < 3 < 5); // 불가능한 코드
// 논리 부정 연산자
System.out.println(!flag1); // false (flag1 값의 반대)
System.out.println(!flag3); // true (flag3 값의 반대)
System.out.println(!(5 == 5)); // false
System.out.println(!(5 == 3)); // true
- 대입 연산자
변수를 바로 연산해서 그 자리에서 저장하는 연산자
기본 대입 연산자인 =,+,- 와 다른 연산을 함께쓰는 복합 대입 연산자가 있다. (+=,-= 등)
복합 대입 연산자는 기본 대입 연산자를 심플하게 작성하게 해주는 것이지 기능은 같다.
+= 1 은 ++과 동일하다(피연산자에 1 더해주기)
EX) num1 += num2 라고 하면 num1 = num1 + num2 가 되는 것.
똑같이 -=1은 --와 동일하다(피연산자에서 1빼주기)
🔥주의!
++ 또는 --가 피연산자 뒤에 붙이냐, 앞에 붙이냐에 따라서 연산순서가 달라진다.
연산자 | 연산자 위치 | 기능 | 연산 예 |
++ | ++{피연산자} | 연산 전에 피연산자에 1 더해줌. | val = ++num; num값+1 후에 val변수에 저장 |
++ | {피연산자}++ | 연산 후에 피연산자에 1 더해줌. | val = num++; num값을 val변수에 저장 후 num+1 |
- - | - -{피연산자} | 연산 전에 피연산자에 1 빼줌. | val = —num; num값-1 후에 val변수에 저장 |
- - | {피연산자}- - | 연산 후에 피연산자에 1 빼줍니다. | val = num—; num값을 val변수에 저장 후 num-1 |
// 대입 증감 연산자
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 10;
int val = ++a + b--; // a 는 연산전에 +1, b 는 연산후에 -1
System.out.println(a); // 11
System.out.println(b); // 9
System.out.println(val); // 21
// 11 + 9 가 왜 21??
// a 는 val 연산전에 ++ 가 수행되어서 11로 연산되었지만
// b 는 val 연산후에 -- 가 수행되어서 기존값이 10으로 연산된 후 -- 가 수행.
// 따라서 연산된 a값인 11과 연산되기전 b값인 10이 더해져서 21이 됨!
int c = a--; // c 에 a 값 대입 후 a-1 (즉, a=10, c=11)
int d = ++b; // b 값 +1 후에 d 에 대입 (즉, b=10, d=10)
int val = c-- * ++d; // c 는 연산후에 -1, d 는 연산전에 +1
System.out.println(a); // 10
System.out.println(b); // 10
System.out.println(c); // 11
System.out.println(d); // 10
System.out.println(val); // 11 * 11 = 121
// 11 * 10 이 왜 121??
// c 는 val 연산후에 -- 가 수행되어서 기존값이 11로 연산된 후 -- 가 수행되었지만
// d 는 val 연산전에 ++ 가 수행되어서 11로 연산.
// 따라서 연산전 a값인 11과 연산된 b값인 11이 곱해져서 121이 됨!
}
}
쉽게 말해,
int a = 10;
int b = 10;
int val = ++a + b--;
이 부분만 보면 나는 일단 뒤에 붙은 복합 연산자는 없다고 생각하고 본다.
그러면 val = ++a + b 이니까 a에 1을 더한 11 + 10 을 해서 val = 21이 되는 것이고 계산을 다 한 후 b에 복합연산자인 --를 붙여 b값은 9가 되는 것!
처음에는 뭔가 되게 복잡하다 생각했는데 생각보다 간단한 것이었다
- 기타 연산자
- 형변환 연산자
// 형변환 연산자
int intNumber = 93 + (int) 98.8; // 93 + 98
double doubleNumber = (double) 93 + 98.8; // 93.0 + 98.8
- 삼항 연산자
: 비교 연산의 결과값에 따라 응답할 값을 직접 지정할 수 있는 연산자.
삼항 연산자는 3가지 피연산자가 존재하여 삼항 연산자라고 한다.(조건/참결과/거짓결과)
- (조건) ? (참결과) : (거짓결과)
// 삼항 연산자
int x = 1;
int y = 9;
boolean b = (x == y) ? true : false;
System.out.println(b); // false
String s = (x != y) ? "정답" : "땡";
System.out.println(s); // 땡
int max = (x > y) ? x : y;
System.out.println(max); // 9
int min = (x < y) ? x : y;
System.out.println(min); // 1
⭐연산자 우선순위
산술 > 비교 > 논리 > 대입 |
// 연산자 우선순위
int x = 2;
int y = 9;
int z = 10;
boolean result = x < y && y < z; // <,> 비교연산자 계산 후 && 논리 연산자 계산
System.out.println(result); // true
result = x + 10 < y && y < z; // +10 산술연산자 계산 후 <,> 비교연산자 계산 후 && 논리 연산자 계산
System.out.println(result); // false
result = x + 2 * 3 > y; // 산술연산자 곱센 > 덧셈 순으로 계산 후 > 비교연산자 계산
System.out.println(result); // false (8>9)
result = (x + 2) * 3 > y; // 괄호안 덧셈 연산 후 괄호 밖 곱셈 계산 후 > 비교연산자 계산
System.out.println(result); // true (12>9)
'코딩 공부 > 개념정리' 카테고리의 다른 글
github 저장소 Mirror (0) | 2023.05.09 |
---|---|
HTTP & MVC (0) | 2023.04.16 |
Java_개행문자? (0) | 2023.04.05 |
Java 변수, 아스키 코드 (0) | 2023.04.03 |
개발 언어_Java(23.04.03) (0) | 2023.04.03 |