3.6.9. 연산자 우선순위

어셈블러에는 식에 사용할 수 있는 다양한 연산자 세트가 포함되어 있습니다. 대부분의 연산자는 C와 같은 상위 언어의 해당 연산자와 비슷합니다 (단항 연산자바이너리 연산자 참조).

식을 평가할 때는 다음과 같은 엄격한 우선순위가 적용됩니다.

  1. 괄호로 묶은 식이 가장 먼저 평가됩니다.

  2. 연산자는 우선순위에 따라 적용됩니다.

  3. 인접 단항 연산자는 오른쪽에서 왼쪽으로 평가됩니다.

  4. 동일한 우선순위의 바이너리 연산자는 왼쪽에서 오른쪽으로 평가됩니다.

armasm 및 C의 연산자 우선순위

어셈블러 우선순위는 C의 우선순위와 정확히 같지는 않습니다.

예를 들어 armasm에서 (1 + 2 :SHR: 3) (1 + (2 :SHR: 3) ) = 1로 평가됩니다. C에서 해당 식은 ( (1 + 2) >> 3) = 0으로 평가됩니다.

괄호를 사용하여 우선순위를 명시적으로 만드는 것이 좋습니다.

코드에 C에서 다르게 구문 분석되는 식이 들어 있고 --unsafe 옵션을 사용하지 않으면 armasm에서 대개 경고를 표시합니다.

A1466W: Operator precedence means that expression would evaluate differently in C

Table 3.4에서는 armasm의 연산자 우선순위를 보여 주고 C의 우선순위와 비교합니다 (Table 3.5 참조).

이 테이블에서 우선순위는 다음과 같습니다.

  • 최상위 우선순위 연산자는 목록의 맨 위에 있습니다.

  • 최상위 우선순위 연산자가 가장 먼저 평가됩니다.

  • 같은 우선순위의 연산자는 왼쪽에서 오른쪽으로 평가됩니다.

Table 3.4. armasm의 연산자 우선순위

armasm 우선순위해당 C 연산자
단항 연산자단항 연산자
* / :MOD:* / %
문자열 조작해당 없음
:SHL: :SHR: :ROR: :ROL:<< >>
+ - :AND: :OR: :EOR:+ - & | ^
= > >= < <= /= <>== > >= < <= !=
:LAND: :LOR: :LEOR:&& ||

Table 3.5. C의 연산자 우선순위

C 우선순위
단항 연산자
* / %
+ - (바이너리 연산자)
<< >>
< <= > >=
== !=
&
^
|
&&
||

Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential