연산자

 

연산자는 데이터를 처리하고 조작하는 데에 사용되는 기호나 키워드를 말한다.

연산자와 피연산자로 구성하는 수식은 항상 계산된 값을 반환하는데, 이 반환값을 계산하는 것이 연산자이다.

여러 개의 연산자가 있는 수식이 있을 때 어떤 연산자를 먼저 적용하여 계산하느냐에 따라 반환값이 달라질 수 있기 때문에 연산자들의 우선순위는 중요할 수밖에 없다. 수학에서 사칙연산을 계산할 때 곱하기와 나누기를 더하기와 빼기보다 먼저 계산하기로 정해놓은 것과 같다.

단 보통은 괄호 () 를 사용하여 명시적으로 우선순위를 표현하는 것이 좋기 때문에 우선순위 자체를 암기하기 위해 노력할 필요는 없는 것 같다.

 


연산자 우선순위

 

연산자 연산 유형 결합 규칙 (방향)
()
[]
->
.
함수 호출
배열 인덱스
포인터를 통한 멤버 접근
멤버 접근
++
--
증가 후위
감소 후위
++
--
+
-
!
~
&
*
sizeof
증가 전위
감소 전위
양수 단항
음수 단항
논리 NOT
비트 NOT
주소
역참조
데이터 크기
(type) 캐스트
*
/
%
곱하기
나누기
나머지
+
-
더하기
빼기
<<
>>
비트 좌측 이동
비트 우측 이동
<
>
<=
>=
관계
==
!=
동등
부등
& 비트 AND
^ 비트 XOR
| 비트 OR
&& 논리 AND
|| 논리 OR
? : 조건
=
+=
-=
*=
/=
%=
&=
|=
^=
<<=
>>=
단순 및 복합 대입
, 콤마

 

표의 상단에 있을수록 우선순위가 높은 것이고, 하단에 있을수록 우선순위가 낮은 것이다. 예를 들어 아래와 같은 코드가 있다면 num 에는 10이 대입된다.

num = 28 - 9 * 2;

결합 방향은 같은 우선순위의 연산자들이 계산되는 방향이라 생각하면 된다. 예를 들어서 1 + 2 - 2와 같은 식을 계산할 때 1 + 2를 계산하고 그 후 - 2를 계산하는 것과 같다. 물론 이 경우는 순서와 상관없이 답이 같지만 다른 연산자인 경우 달라질 수 있고, C 언어는 컴파일 언어이기 때문에 컴파일러가 처리하는 순서에도 영향을 주기 때문에 중요하다.

 

애스터로이드