연산자(operator) - 연산을 수행하는 기호(+, -, *, / 등)
피연산자(operand) - 연산자의 작업 대상(변수, 상수, 리터럴, 수식)
ex) 'x+3'에서 +는 연산자, x와 3은 피연산자
| 종류 | 연산자 | 설명 |
|---|---|---|
| 산술 연산자 | + - * / % << >> | 사칙 연산(+,-,* ,/)과 나머지 연산 |
| 비교 연산자 | > < >= <= == != | 크고 작음과 같고 다름을 비교 |
| 논리 연산자 | && | |
| 대입 연산자 | = | 우변의 값을 좌변에 저장 |
| 기타 | (type) ?: instanceof | 형변환 연산자, 삼항 연산자, instanceof 연산자 |
- 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다.
- 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다.
- 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.
| 종류 | 결합규칙 | 연산자 | 우선순위 |
|---|---|---|---|
| 단항 연산자 | <-------- | ++ -- + - ~ ! (type) | 높음 |
| 산술 연산자 | --------> | * / % | |
| --------> | + - | ||
| --------> | << >> | ||
| 비교 연산자 | --------> | < > <= >= instanceo | |
| --------> | == !+ | ||
| 논리 연산자 | --------> | & | |
| --------> | ^ | ||
| --------> | | | ||
| --------> | && | ||
| --------> | || | ||
| 삼항 연산자 | --------> | ?: | |
| 대입 연산자 | <-------- | = += -= *= /= %= <<= >>= &= ^= |= | 낮음 |
산술 변환이란? 연산 수행 직전에 발생하는 피연산자의 자동 형변환
① 두 피연산자의 타입을 같게 일치시킨다(보다 큰 타입으로 일치).
② 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.
증가 연산자(++) 피연산자의 값을 1 증가시킨다.
감소 연산자(--) 피연산자의 값을 1 감소시킨다.
| 타입 | 설명 | 사용예 |
|---|---|---|
| 전위형 | 값이 참조되기 전에 증가시킨다. | j = ++i; |
| 후위형 | 값이 참조된 후에 증가시킨다. | j = i++; |
두 피연산자의 값의 크기를 비교하는 연산자이다. 참이면 true, 거짓이면 false를 결과로 반환한다. 기본형 중에서는 boolean형을 제외한 나머지 자료형에 다 사용할 수 있지만 참조형에는 사용할 수 없다.
| 비교연산자 | 연산결과 |
|---|---|
| > | 좌변 값이 크면 true, 아니면 false |
| < | 좌변 값이 작으면 true, 아니면 false |
| >= | 좌변 값이 크거나 같으면 true, 아니면 false |
| <= | 좌변 값이 작거나 같으면 true, 아니면 false |
두 피연산자의 값이 같은지 또는 다른지를 비교하는 연산자이다. 대소비교 연산자와는 달리, 모든 자료형에 사용할 수 있다.
| 비교연산자 | 연산결과 |
|---|---|
| == | 두 값이 같으면 true, 아니면 false |
| != | 두 값이 다르면 true, 아니면 false |
class OperatorEx21{
public static void main(String args[]){
System.out.printf("10 == 10.0f \t %b\n", 10==10.0f); // true
System.out.printf("'0'== 0 \t %b\n", '0'==0); // false
System.out.printf("'A'== 65 \t %b\n", 'A'==65); // true
System.out.printf("'A' > 'B' \t %b\n", 'A'>'B'); // false
System.out.printf("'A'+1 != 'B'\t %b\n", 'A'+1 != 'B'); // false
}
}
|| (OR결합) - 피연산자 중 어느 한 쪽만 true이면 true를 결과로 얻는다.
&& (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 |
// ex)
// 1. x는 10보다 크고, 20보다 작다.
x > 10 && x < 20
// 2. i는 2의 배수 또는 3의 배수이다.
i % 2 == 0 || i % 3 == 0
// 3. i는 2의 배수 또는 3의 배수지만 6의 배수는 아니다.
(i % 2 == 0 || i % 3 == 0) && i % 6 != 0
// 4. 문자 ch는 숫자('0'~'9')이다.
'0' <= ch && ch <= '9'
// 5. 문자 ch는 대문자 또는 소문자이다.
('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z')
논리 연산자의 또 다른 특징은 효율적인 연산을 한다는 것
OR 연산 || 의 경우, 두 피 연산자 중 어느 한 쪽만 참 이어도 전체 연산결과가 참 이므로 좌측 피연산자가 'true(참)'이면, 우측 피연산자의 값은 평가하지 않는다.
AND연산 && 의 경우도 마찬가지로, 어느 한쪽만 거짓(false) 이어도 전체 연산결과가 '거짓(false)' 이므로 좌측이 거짓이면 우측은 평가하지 않는다.
피연산자가 true이면 false를, false면 true를 결과로 반환한다.
| (OR 연산자) - 피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다.
& (AND 연산자) - 피연산자 양 쪽이 모두 1이어야만 1을 결과로 얻는다. 그 외에는 0을 얻는다.
^ (XOR 연산자) - 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 때는 0을 얻는다.
이 연산자는 피연산자를 2진수로 표현했을 때, 0은 1로, 1은 0으로 바꾼다. 논리부정 연산자 '!'와 유사하다.
즉, 피연산자의 '1의 보수'를 얻을 수 있다. 그래서 비트전환연산자를 '1의 보수' 연산자라고도 한다.이 연산자는 피연산자의 각 자리(2진수로 표현했을 때)를 '오른쪽(>>)' 또는 '왼쪽(<<)'으로 이동(shift) 한다고 해서 '쉬프트 연산자(shift operator)'라고 이름 붙여졌다.
x << n 은 x * 2^n의 결과와 같다.
x >> n 은 x / 2^n의 결과와 같다.
조건 연산자는 건식, 식1, 식2 모두 세 개의 피연산자를 필요로 하는 삼항 연산자이며, 삼항 연산자는 조건 연산자 하나뿐이다.
조건식 ? 식1 : 식2
result = (x > y) ? x : y; // 이런식으로 사용한다.
대입 연산자는 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용된다. 이 연산자는 오른쪽 피연산자의 값(식이라면 평가값)을 왼쪽 피연산자에 저장한다.
대인 연산자는 다른 연산자(op)와 결합하여 'op='와 같은 방식으로 사용될 수 있다.
| 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); |
저는 그냥 책만 보고 공부하긴 하지만 필요한 사람이 있을까봐 남깁니다.