수학에서 사칙연산을 배울 때를 생각해보자 + - * / 덧셈, 뺄셈, 곱셈, 나눗셈이 한 번에 존재하는 수식을 어떻게 계산한다고 배웠는지를 생각해보자

자연스럽게 곱셈과 나눗셈을 먼저 계산한 후에 덧셈과 뺄셈을 하게 될 것이다. 이 와중에서도 곱셈과 나눗셈은 결합방향에 근거하여 나눗셈보다 곱셈이 먼저 계산된다.
C언어 에서도 이와 같은 연산자 우선순위가 존재하는데 아래 표와 같은 우선순위를 갖는다.
| 우선순위 | 연산자 | 설명 | 결합 법칙(방향) |
|---|---|---|---|
| x++ | 증가 연산자(뒤, 후위) | ||
| x-- | 감소 연산자(뒤, 후위) | ||
| ( ) | 함수 호출 | ||
| 1순위 | [ ] | 배열 첨자 | → |
| . | 구조체/공용체 멤버 접근 | ||
| -> | 포인터로 구조체/공용체 멤버 접근 | ||
| (자료형){값} | 복합 리터럴 | ||
| ---------- | ------------- | -------------------------------------- | ------------------ |
| ++x | 증가 연산자(앞, 전위) | ||
| --x | 감소 연산자(앞, 전위) | ||
| +x | 단항 덧셈 | ||
| -x | 단항 뺄셈 | ||
| 2순위 | ! | 논리 NOT | ← |
| ~ | 비트 NOT | ||
| (자료형) | 자료형 캐스팅(자료형 변환) | ||
| *x | 포인터 x역참조 | ||
| &x | x의 주소 | ||
| sizeof | 자료형의 크기 | ||
| ---------- | ------------- | -------------------------------------- | ------------------ |
| * | 곱셈 | ||
| 3순위 | . | 나눗셈 | → |
| % | 나머지 | ||
| ---------- | ------------- | -------------------------------------- | ------------------ |
| + | 덧셈 | ||
| 4순위 | - | 뺄셈 | → |
| ---------- | ------------- | -------------------------------------- | ------------------ |
| << | 왼쪽으로 비트를 시프트 | ||
| 5순위 | >> | 오른쪽으로 비트를 시프트 | → |
| ---------- | ------------- | -------------------------------------- | ------------------ |
| < | 작음(논리) | ||
| <= | 작거나 같음(논리) | ||
| 6순위 | > | 큼(논리) | → |
| >= | 크거나 같음(논리) | ||
| ---------- | ------------- | -------------------------------------- | ------------------ |
| == | 같음 | ||
| 7순위 | != | 다름 | → |
| ---------- | ------------- | -------------------------------------- | ------------------ |
| 8순위 | & | AND(비트) | → |
| ---------- | ------------- | -------------------------------------- | ------------------ |
| 9순위 | ^ | XOR(비트) | → |
| ---------- | ------------- | -------------------------------------- | ------------------ |
| 10순위 | | | OR(비트) | → |
| ---------- | ------------- | -------------------------------------- | ------------------ |
| 11순위 | && | AND(논리) | → |
| ---------- | ------------- | -------------------------------------- | ------------------ |
| 12순위 | || | OR(논리) | → |
| ---------- | ------------- | -------------------------------------- | ------------------ |
| 13순위 | ? : | 삼항 연산자 | ← |
| ---------- | ------------- | -------------------------------------- | ------------------ |
| = | 할당 | ||
| += | 덧셈 후 할당 | ||
| -= | 뺼셈 후 할당 | ||
| *= | 곱셈 후 할당 | ||
| /= | 나눗셈 후 할당 | ||
| 14순위 | %= | 나머지 연산 후 할당 | ← |
| <<= | 비트를 왼쪽으로 시프트 한 후 할당 | ||
| >>= | 비트를 오른쪽으로 시프트한 후 할당 | ||
| &= | 비트 AND 연산 후 할당 | ||
| ^= | 비트 XOR 연산 후 할당 | ||
| |= | 비트 OR연산 후 할당 | ||
| ---------- | ------------- | -------------------------------------- | ------------------ |
| 15순위 | , | 쉼표 연산자 | → |
연산자 우선순위가 필요한 이유는 연산자 우선순위로 인해 다른 결과가 나올때 해결을 위해서는 가장 먼저 연산되어야 할 연산자에 괄호를 쳐주는 것이 가독성도 좋고 가장 간단하고, 컴파일러가 표현식을 발견하고 평가할때 괄호 안에 있는 연산자를 우선순위가 가장 높은것으로 간주하기 때문이다.