2010-03-03 9 views
1

C에 대한 O'Reilly 포켓 레퍼런스를 참조하면, 나는 *, /% 연산자의 그룹화에 대한 설명에 약간 혼란 스럽습니다. 이 책은 그룹화이 왼쪽에서 오른쪽으로 발생한다고 말합니다. 이제는 평가 순서와 혼동하는 경향이 있습니다. 다음 방정식을 감안할 때, 그리고 책에서 설정 한 규칙은, 나는 *,/및 %에 대해 C에서 연산자 우선 순위 그룹화는 어떻게 작동합니까?

int x = 4/3 * -3 

이 ... 0로 평가 ...라고 생각했을 것이다 그러나

1: 4/3 * -3 
2: 4/-9 
3: 0 

... 때문에 ... ,

1: 4/3 * -3 
2: 1 * -3 
3: -3 

은 왜이다 ... 실제로 -3로 평가하고,이 방법을 사용하는 것?

+1

괄호는 친구입니다 ... 괄호 없이도 무언가가 어떻게 평가 될지 모르는 경우 다른 사람이 코드를 읽지 않습니다. 괄호로 둘러 쌓으면 사람들은 무슨 일이 일어나고 있는지 이해할 가능성이 높습니다. – Adam

답변

7

그것은 나에게 의미가 있습니다 :

int x = 4/3 * -3; 

은 왼쪽에서 오른쪽으로 그룹화, 우리가 얻을 :

int x = (4/3) * -3 
int x = ((4/3) * -3); 

는 또한 precedence table를 참조하십시오. 그들은 우선 순위가 같기 때문에 왼쪽에서 오른쪽으로 묶습니다.

+0

아, 나는'*','/','%의 목록에서 가장 왼쪽 연산자를 먼저 선택합니다. '를 사용하고 방정식의 가장 왼쪽 연산자 대신에 이것을 먼저 그룹화합니다. 해명 해줘서 고마워. –

0

곱하기와 나눗셈은 왼쪽으로 연관되어 있으므로 두 번째 순서는 어떻게됩니까? 연산이 (4/3)으로 그룹화 된 다음 결과에 -3을 곱합니다.

0

수학의 경우 C는 높은 스쿨에서 배운 것처럼 작동합니다. BODMAS (나누기 대괄호, 곱셈, 더하기 및 빼기)를 기억하십시오. 즉 왼쪽에서 오른쪽으로 계산을 찾습니다. 이 경우 4/3을보고 대답을 계산 한 다음 그 답을 -3으로 곱합니다. 대괄호를 사용하여 대괄호 (4/(3*-3))를 수정할 수 있습니다. this page에서 C가 연산자를 계산하고 계산을 수행하는 방법에 대한 요약을 살펴보십시오.

+0

우리는 PEMDAS를 배웠다 : 괄호, 지수, 곱셈, 나눗셈, 덧셈, 뺄셈 (또한 쿨러를 구어체로 발음 - "펨 - 도스") – Adam

1

여기에서는 시스템 인식을 위해 연관성을 유지합니다. 따라서 표현식을 평가하기 위해서만 두 번째로 예제를 실행합니다.

1

IMHO,이 연산자 우선 순위에 대해 알아두면 좋지만, 의심스러운 경우 괄호를 사용하는 것이 좋습니다. 주인이 말했듯이 코드는 기계보다 인간 독자를위한 것입니다. 저자가 확실하지 않거나 독자가 될 수없는 경우.

+0

+1 괄호를 많이 사용하는 경우 +1 – Johan

2

다음 URL을 방문하십시오. C의 모든 항목에서 매우 유용합니다. 연산자 우선 순위도 사용할 수 있습니다.

http://www.goldfish.org/books/The%20C%20Programming%20Language%20-%20K&R/chapter2.html#s2.12 
+1

매우 친절! :) – LiraNuna

5

당신은 우선 순위와 운영자의 연관성 모두를 알아야합니다.

곱셈 (*)은 덧셈 (+)보다 우선 순위가 높으므로 2 + 3 * 4는 C와 일반 수학 모두에서 2+ (3 * 4)로 해석됩니다.그러나 2 * 3/4 또는 2 * 3 * 4와 같은 표현식에서 연산자는 모두 우선 순위가 동일하므로 연관성을 살펴야합니다. 2 * 3/4는 (2 * 3)/4가되고, 2 * 3 * 4 * 5는 ((2 * 3) * 4가됩니다.) 대부분의 연산자는 왼쪽에서부터 그룹화를 시작합니다.) * 5, 등등.

예외는 C에서 연산자입니다. 할당은 오른쪽 연관이므로 a = b = 3은 a = (b = 3)으로 읽어야합니다.

좋은 C 서적 또는 자습서에는 우선 순위와 연관성을 모두 포함한 모든 연산자 (예 : this one)의 테이블이 있어야합니다.