# 3장

\ <br>

### 1. 기본 개념과 연산자의 결합 규칙

* 기본 개념
  * 연산자(operator): 연산을 수행하는 기호
  * 피연산자(operand): 연산의 대상
* 연산자 결합 규칙
  * 산술 > 비교 > 논리 > 대입: 대입은 제일 마지막에 수행
  * 단항(1) > 이항(2) > 삼항(3): 단항 연산자의 우선 순위가 이항 연산자보다 높음
  * 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행 방향은 왼쪽에서 오른쪽

\ <br>

### 2. 기타 연산자

| 연산자                 | 설명                                | 우선순위                                                              | 결합 방향                   |                      |
| ------------------- | --------------------------------- | ----------------------------------------------------------------- | ----------------------- | -------------------- |
| 첨자                  | \[]                               | 첨자 연산 결과 반환                                                       | 1                       | <p>왼쪽에서<br>오른쪽으로</p> |
| 멤버                  | .                                 | 멤버 연산 결과 반환                                                       | 1                       |                      |
| 증감                  | ++                                | 후위형(postfix)                                                      | 피연산자의 값이 참조된 후 1 증가     | 2                    |
| --                  | 피연산자의 값이 참조된 후 1 감소               | 2                                                                 |                         |                      |
| 부호                  | +                                 | 피연산자의 부호와 동일한 결과를 반환 (단항 연산자)                                     | 3                       | <p>오른쪽에서<br>왼쪽으로</p> |
| -                   | 피연산자의 부호를 반대로 변경한 결과를 반환 (단항 연산자) | 3                                                                 |                         |                      |
| 증감                  | ++                                | 전위형(prefix)                                                       | 피연산자의 값이 참조된 후 1 감소     | 3                    |
| --                  | 피연산자의 값이 참조된 후 1 감소               | 3                                                                 |                         |                      |
| 형변환                 | (타입)                              | <p>변수 또는 상수 타입을 다른 타입으로 변환<br>큰 자료형에서 작은 자료형으로 변환 시 데이터 손실 발생</p> | 3                       |                      |
| 조건                  | ?:                                | <p>조건식 ? 식1(참) : 식2(거짓)<br>삼항 연산자이며 조건식의 결과에 따라 다른 결과 반환</p>      | 14                      |                      |
| 대입                  | =                                 | lvalue(left value)                                                | 대입 연산자의 왼쪽 피연산자(변수만 가능) | 15                   |
| rvalue(right value) | 대입 연산자의 오른쪽 피연산자(변수, 상수, 식)       |                                                                   |                         |                      |
| 복합 대입               | (연산자)=                            | 다른 연산자와 결합하여 '(연산자)=' 형식으로 사용                                     |                         |                      |

* 자동 형변환: 기존의 값을 최대한 보존할 수 있는 타입으로 형변환하는 것

![png](https://979546957-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXToj3GG8hYUuKGTWqvUm%2Fuploads%2Fgit-blob-902329304adf9474a3204923b358f5516f7341d1%2F3-1.png?alt=media)

\ <br>

### 3. 산술 연산자

* 산술 연산 시 자동 형변환

| 연산자                                                                               | 설명                           | 우선순위                 | 결합 방향 |                      |
| --------------------------------------------------------------------------------- | ---------------------------- | -------------------- | ----- | -------------------- |
| 나머지                                                                               | %                            | 두 피연산자의 값을 나눈 나머지 반환 | 4     | <p>왼쪽에서<br>오른쪽으로</p> |
| 나누는 수(오른쪽 피연산자)로 0 사용 불가                                                          |                              |                      |       |                      |
| 사칙연산                                                                              | \*                           | 두 피연산자의 값을 곱한 결과 반환  |       |                      |
| /                                                                                 | 두 피연산자의 값을 나눈 결과 반환          |                      |       |                      |
| <p>- 나누는 수(오른쪽 피연산자)로 0 사용 불가<br>- 피연산자로 정수와 실수 허용<br>(나누는 수가 음수일 경우 부호를 무시함)</p> |                              |                      |       |                      |
| +                                                                                 | 두 피연산자의 값을 더한 결과 반환 (이항 연산자) | 5                    |       |                      |
| -                                                                                 | 두 피연산자의 값을 뺀 결과 반환 (이항 연산자)  |                      |       |                      |

\ <br>

### 4. 비교 연산자와 문자열 비교

#### 4.1. 비교 연산자

* 문자는 유니코드 숫자로 비교 가능

| 연산자 | 설명                              | 우선순위 | 결합 방향                |
| --- | ------------------------------- | ---- | -------------------- |
| >   | 좌변 값이 크면 true 아니면 false 반환      | 7    | <p>왼쪽에서<br>오른쪽으로</p> |
| <   | 좌변 값이 작으면 true 아니면 false 반환     |      |                      |
| >=  | 좌변 값이 크거나 같으면 true 아니면 false 반환 |      |                      |
| <=  | 좌변 값이 작거나 같으면 true 아니면 false 반환 |      |                      |
| ==  | 두 값이 같으면 true 아니면 false 반환      | 8    |                      |
| !=  | 두 값이 다르면 true 아니면 false 반환      |      |                      |

<br>

#### 4.2. 문자열 비교

* 문자열을 비교할 때는 비교 연산자 '==' 대신 메서드 사용
* 비교 연산자는 두 문자열이 완전히 같은지 비교할 뿐 내용을 비교하지 않음

| equals()           | <p>- 비교하는 두 문자열이 같으면 true, 다르면 false 반환<br>- 대소문자를 구별</p> |
| ------------------ | --------------------------------------------------------- |
| equalsIgnoreCase() | equals()와 동일하나 대소문자를 구별하지 않음                              |

\ <br>

### 5. 비트 연산자

| 연산자 | 설명                            | 우선순위 | 결합 방향                |
| --- | ----------------------------- | ---- | -------------------- |
| \~  | 비트 NOT 연산 결과 반환               | 3    | <p>오른쪽에서<br>왼쪽으로</p> |
| <<  | 비트 왼쪽 시프트 결과 반환               | 6    | <p>왼쪽에서<br>오른쪽으로</p> |
| >>  | 부호 비트를 확장하면서 비트 오른쪽 시프트 결과 반환 |      |                      |
| >>> | 부호 비트까지 모두 비트 오른쪽 시프트 결과 반환   |      |                      |
| &   | 비트 AND 연산 결과 반환               | 9    |                      |
| ^   | 비트 XOR 연산 결과 반환               | 10   |                      |
| \|  | 비트 OR 연산 결과 반환                | 11   |                      |

\ <br>

### 6. 논리 연산자

| 연산자  | 설명                                  | 우선순위 | 결합 방향                |
| ---- | ----------------------------------- | ---- | -------------------- |
| !    | 피연산자가 true이면 false, false이면 true 반환 | 3    | <p>오른쪽에서<br>왼쪽으로</p> |
| &&   | 피연산자 양쪽 모두 true이면 true 반환           | 12   | <p>왼쪽에서<br>오른쪽으로</p> |
| \|\| | 피연산자 중 어느 한 쪽이 true이면 true 반환       | 13   |                      |

\
\
참고 자료

* 자바의 정석 - 도우출판
