2014-03-06 6 views
0

C에서 접미사와 접두어 연산자 우선 순위와 혼동됩니다. 어떤 도움이나 힌트라도 도움이됩니다.접두사 접두어 ++와 2 진수 & 연산자 우선 순위

여기 내 테스트 코드를 붙여 있습니다 :

#include <stdio.h> 

int a = 0; 

int main(int argc, char *argv[]) 
{ 
    if (++a & 0x01) // prefix version 
    // if (a++ & 0x01) // postfix version 
    { 
     printf("++ first\n"); 
    } 
    else 
    { 
     printf("& first\n"); 
    } 
    return 0; 
} 

지금 postfix ++이 더 큰 우선 순위를 가지고 있지만 후위 버전, a++0x01& 여기 0을 반환하고 a를 증가 것이라고 이해할 수있다 이 식 뒤에 값이 있습니다.

하지만 내가 이해할 수없는 것은 접두어 버전에서 왜 ++a이 처음 평가되는 것입니까? 연산자 우선 순위 테이블은 prefix ++&이 같은 우선 순위를 가지며, 또한 이들의 연관성이 right-to-left임을 나타냅니다. 이것이 먼저 &을 평가해야한다는 뜻입니까?

편집 : 차트 내가 사용 : C Operator Precedence Table

+0

어떤 차트를 사용하고 있습니까? 이는 올바르지 않습니다. '++'는 바이너리'&'보다 우선 순위가 높습니다. [here] (http://www.swansontec.com/sopc.html)를 참조하십시오. –

답변

0

:

++ A -> (+ 증가를 검색), 다음 값을 사용합니다.

++ -> (검색), 값을 사용 (증가)

우선 순위 :이 방법이 :

((++ a)에 & 0x01로), 모두 (& 및 ++) 다른 표현입니다.

이해하는 데 어느 정도 도움이 되길 바랍니다.