연산자 우선순위 — C/Java 공통표
단항 → 산술(×÷%>+−) → 시프트 → 관계 → 동등 → 비트(&^|) → 논리(&&||) → 삼항 → 대입.
실기 2~3번 유형(C/Java 코드 추적)의 첫 단추. 우선순위 착각 = 전체 오답. 특히 비트 AND(&) > XOR(^) > OR(|) 순서와 삼항·대입이 우결합(right-to-left)인 점을 모르면 감점. Java는 C의 `*p`·`&a`·`sizeof`가 없고 대신 `>>>`(부호 없는 우시프트)를 가진다.
연산자 우선순위표를 외우지 못하면 괄호 없는 식에서 계산 순서를 판단할 수 없다. 대부분의 언어가 C 표준을 따르므로 Java·JavaScript·Python도 거의 동일한 순위를 쓴다.
| 순위 | 연산자 | 결합 |
|---|---|---|
| 1 | `()` `[]` `->` `.` (함수/배열/멤버) | → |
| 2 | 단항 `!` `~` `++` `--` `*` `&` `sizeof` | ← |
| 3 | `*` `/` `%` (곱·나·나머지) | → |
| 4 | `+` `-` (이항 덧·뺄) | → |
| 5 | `<<` `>>` (시프트) | → |
| 6 | `<` `<=` `>` `>=` (관계) | → |
| 7 | `==` `!=` (동등) | → |
| 8 | 비트 `&` | → |
| 9 | 비트 `^` | → |
| 10 | 비트 `|` | → |
| 11 | 논리 `&&` | → |
| 12 | 논리 `||` | → |
| 13 | 삼항 `? :` | ← |
| 14 | 대입 `=` `+=` `-=` `*=` ... | ← |
| 15 | 콤마 `,` | → |
암기 순서 — 산술 → 비교 → 동등 → 비트(AND·XOR·OR) → 논리(AND·OR) → 삼항 → 대입. 괄호가 최고, 대입이 최저. 같은 순위 내에서는 대부분 좌결합, 단항·삼항·대입만 우결합.
Java 연산자 차이 — C의 `*`(역참조)·`&`(주소)·`sizeof`는 Java에 없음. 대신 Java는 `>>>`(부호 없는 우시프트, 음수도 0으로 채움)과 `instanceof`(타입 검사)가 추가된다. Python도 `?:` 없이 `x if cond else y` 문법 사용.
함정 문제 패턴 - `int x = 5 + 3 * 2 - 1;` → `3*2=6, 5+6=11, 11-1=10`. `*`가 `+-`보다 먼저. - `a & b | c` → `(a & b) | c`. & > |. - `a = b = c = 5;` → 우결합으로 `a = (b = (c = 5))`. 모두 5.
다음 C 코드의 결과값은? `int x = 5 + 3 * 2 - 1;`
다음 Java 코드의 결과는? `int r = 0b1100 & 0b1010 | 0b0001;`
삼항 연산자(`? :`)와 대입 연산자(`=`)의 결합 방향은 모두 ( )이다.
Java에는 C의 `sizeof` 단항 연산자가 동일하게 존재한다.