연산자
연산자는 데이터를 처리하고 조작하는 데에 사용되는 기호나 키워드를 말한다.
연산자와 피연산자로 구성하는 수식은 항상 계산된 값을 반환하는데, 이 반환값을 계산하는 것이 연산자이다.
여러 개의 연산자가 있는 수식이 있을 때 어떤 연산자를 먼저 적용하여 계산하느냐에 따라 반환값이 달라질 수 있기 때문에 연산자들의 우선순위는 중요할 수밖에 없다. 수학에서 사칙연산을 계산할 때 곱하기와 나누기를 더하기와 빼기보다 먼저 계산하기로 정해놓은 것과 같다.
단 보통은 괄호 () 를 사용하여 명시적으로 우선순위를 표현하는 것이 좋기 때문에 우선순위 자체를 암기하기 위해 노력할 필요는 없는 것 같다.
연산자 우선순위
연산자 | 연산 유형 | 결합 규칙 (방향) |
() [] -> . |
함수 호출 배열 인덱스 포인터를 통한 멤버 접근 멤버 접근 |
→ |
++ -- |
증가 후위 감소 후위 |
→ |
++ -- + - ! ~ & * sizeof |
증가 전위 감소 전위 양수 단항 음수 단항 논리 NOT 비트 NOT 주소 역참조 데이터 크기 |
← |
(type) | 캐스트 | ← |
* / % |
곱하기 나누기 나머지 |
→ |
+ - |
더하기 빼기 |
→ |
<< >> |
비트 좌측 이동 비트 우측 이동 |
→ |
< > <= >= |
관계 | → |
== != |
동등 부등 |
→ |
& | 비트 AND | → |
^ | 비트 XOR | → |
| | 비트 OR | → |
&& | 논리 AND | → |
|| | 논리 OR | → |
? : | 조건 | ← |
= += -= *= /= %= &= |= ^= <<= >>= |
단순 및 복합 대입 | ← |
, | 콤마 | → |
표의 상단에 있을수록 우선순위가 높은 것이고, 하단에 있을수록 우선순위가 낮은 것이다. 예를 들어 아래와 같은 코드가 있다면 num 에는 10 이 대입된다.
num = 28 - 9 * 2;
결합 방향은 같은 우선순위의 연산자들이 계산되는 방향이라 생각하면 된다. 예를 들어서 1 + 2 - 2 와 같은 식을 계산할 때 1 + 2 를 계산하고 그 후 - 2 를 계산하는 것과 같다. 물론 이 경우는 순서와 상관없이 답이 같지만 다른 연산자인 경우 달라질 수 있고, C 언어는 컴파일 언어이기 때문에 컴파일러가 처리하는 순서에도 영향을 주기 때문에 중요하다.
'Language > C & C++' 카테고리의 다른 글
[C++] 값에 의한 호출(call by value)과 주소에 의한 호출(call by address) 그리고 참조에 의한 호출(call by reference) (0) | 2024.10.13 |
---|---|
[C++] 동적 메모리 할당 및 반환 (0) | 2024.10.13 |
[C++] 클래스(class)와 객체(object) 선언 (0) | 2024.09.18 |
[C] 입출력 형식과 서식 지정자 (0) | 2024.08.30 |
[C] 기본 자료형 크기와 범위 (0) | 2024.08.29 |