2012-05-01 4 views
1

둘 사이의 차이점을 파악하는 데 문제가 있습니다. 어떻게 아래의 표현식을 평가 것,
오른쪽 왼쪽피연산자 평가 순서 및 연관성

에 위의 규칙을 감안할 때 :

a[0] = 10 
a[1] = 13 
a[2] = 17 
a[3] = 19 
x = 0 
y = 3 

연산자 우선 순위 :

++, -- 
*, /, % Left Associative 
+, - Left Associative 

피연산자 평가 순서는 다음 기븐스가 있다고?

a[++x] + ++x % 7 % y 

제 교수에 따르면 대답은 18이지만, 이유를 알 수 없습니다. 내가 이해할 수있는 것은 연관성이 순서가 같은 우선 순위입니다. 연산자는 평가되고 피연산자 평가 순서는 피연산자가 평가되는 순서입니다. 2 % 7과 같이 왼쪽에서 오른쪽 피연산자 평가 순서 2, 연산 평가 순서 1이 될 것입니다. 아무도 내 교수가 18의 답을 얻은 방법을 설명 할 수 있습니까?

답변

2

우선 순위와 연관성은 표현식이 (암시 적으로) 괄호 처리되는 방식을 알려줍니다. 그런 다음 평가 순서에 따라 하위식이 평가되는 순서가 결정됩니다.

우리가 예를 살펴 보자 : 최상위 레벨에

a[++x] + ++x % 7 % y 

+ 및 운영자 등 %있다. 즉 오른쪽 표현식 두 %을 갖는다

a[++x] + (++x % 7 % y) 

그래서 +는 낮은 우선 순위를 가지며, 즉 오른쪽에서 왼쪽으로 평가 순서, ((++x % 7) % y)가 먼저 평가로하기 때문에,

a[++x] + ((++x % 7) % y) 

을 왼쪽부터 결합된다. 다시 오른쪽에서 왼쪽 평가 순서를 사용하면 y이 먼저 계산되어 3이됩니다. 그러면 ++x % 7이 계산됩니다. 처음 7시 다음에 ++x. 후자의 결과는 1입니다. 따라서 1 % 7 = 1입니다. 나는 숙제이기 때문에 나머지는 너에게 맡길 것이다.

+0

내가 낡은 테스트에서 틀렸다고 생각하는 질문은 그가 내가 최종, 나쁜 태그를 위해 공부하고 있다는 답변을 가지고 있다는 것입니다. 당신의 도움을 주셔서 감사합니다! –

1

귀하는 () +() % 7 % y입니다. 규칙에 따라 () % 7... % y 전에 평가되고 () + ... 전에 평가됩니다.

++x % 7에서 먼저 ++x을 평가하고 1과 x=1을 얻습니다. 1 % 7 = 1.
그러면 1 % y 또는 1 % 3을 얻고 1을 얻습니다.
이제 a[++x] + 1을합니다. x=1을 기억하면 a[2] + 1 = 17 + 1 = 18이됩니다.