우선 순위가 & & 인 경우 ||보다 크면이 코드가 --b & & ++ c를 먼저 평가하지 않아야하므로 출력이 1 2 4 11이어야합니다. 1 2 5 10 줄을 단락 된 것 같습니다. 제발 도와주세요!평가 순서 || && in c
int x;
int a=1,b=5,c=10;
x=a++||--b&&++c;
printf("%d %d %d %d\n",x,a,b,c);
return 0;
우선 순위가 & & 인 경우 ||보다 크면이 코드가 --b & & ++ c를 먼저 평가하지 않아야하므로 출력이 1 2 4 11이어야합니다. 1 2 5 10 줄을 단락 된 것 같습니다. 제발 도와주세요!평가 순서 || && in c
int x;
int a=1,b=5,c=10;
x=a++||--b&&++c;
printf("%d %d %d %d\n",x,a,b,c);
return 0;
이 코드는 & & C++ 첫번째
없음 연산자 우선 순위는 평가 순서에 영향을주지 않습니다 --b 평가해서는 안된다. 그냥 그래서 먼저 평가 a++
는 여전히, 따라서 단락 문
a++||--b&&++c
이
a++||(--b&&++c)
에 equilvalent 것을 의미한다.
우선 순위가 &&
일 때 더 높습니다. 즉, 왼쪽 및 오른쪽에있는 항목을 ||
보다 엄격하게 바인딩합니다. 그 표현이
a++ || (--b && ++c)
||
에 해당 그래서 왼쪽의 표현식이 아닌 0으로 평가되는 경우에만 오른쪽의 일을 평가한다. a가 1
이므로 a++
만 평가되고 b
은 감소하지 않고 c
은 증가하지 않습니다.
--b && ++c
은 전혀 평가되지 않습니다.
예, &&
는 높은 우선 순위를 가지고 있지만, 단지 평가의 피연산자의 아닌 위해 그룹화를 결정합니다. 여기에 기본 연산은 ||
입니다.이 연산은 오른쪽 연산이 무엇이든 관계없이 왼쪽이 참이면 오른쪽이 평가되지 않도록합니다.
여기에 직장에서 두 가지 개념이있다
, || 연산자는 왼쪽 연관입니다. 결과적으로, ++가 먼저 평가 될 것입니다. 왼쪽이 TRUE이므로 컴파일러 최적화 단락하면 오른쪽의 || 표현식의 결과가 변경되지 않으므로 평가되지 않습니다.
이것은 최적화 나 컴파일러와 아무 관련이 없습니다. 단락은 표준 정의 된 동작입니다. –
컴파일러 최적화가 선택적이지만 단락 회로는 선택 사항이 아니라는 점에서 당신은 맞습니다. 그러나 직관적으로 이것은 최적화입니다. 나는 대답을 편집 할 것이다. 감사. –
훨씬 더 선명하게! ... –
그래서 어떻게 괄호를 넣어야하는지 알 수 있습니까? – Ashwyn
@Ashwyn Thum의 좋은 규칙은 의도가 명확하지 않은 경우 괄호를 넣는 것입니다. 이 경우에는 괄호로 묶지 않아도됩니다. IMO는 어떻게되는지 분명합니다. –
@Ashwyn 당신이 그 요점을 놓치고 있다고 생각합니다. 당신은 &&가 ||보다 단단하다고 가정하는 것이 옳습니다.그러나 표현은 여전히 왼쪽에서 오른쪽으로 평가됩니다. –