2016-06-16 9 views
-2

나는 0과 NULL 자체가 거짓임을 평가하고, 음수 또는 양의 정수가 TRUE로 평가된다는 것을 알고있다.if (! (- 1))가 C에서 true 또는 false로 평가됩니까?

나의 이해는 식을 평가 한 후, 그래서 if (-1)는 다음 ! 피연산자가 FALSE 동일 NOT TRUE을 의미합니다 적용, TRUE로 평가됩니다 NOT 작업이 일어날 것입니다. 이 작업의 순서가 맞습니까? if (!(-1))FALSE으로 계산됩니다.

+2

시도해 보셨습니까? –

+0

[직접 해보기] (http://coliru.stacked-crooked.com/a/f1471249b698860a) –

+0

최종 결과뿐만 아니라 작업 순서와 관련된 답변도 찾고 있습니다. –

답변

4

if (!(-1))의 평가는 작업자 우선 순위에 대해 생각해 볼 수 있습니다.

먼저 단 하나의 -을 1에 적용하여 -1이라는 정수를 생성합니다. 그런 다음이 값은 !에 의해 논리적으로 무효화됩니다. 여기에는 -1이 논리 값으로 축소됩니다. 이 C에 대한 규칙은 정수형의 경우 훌륭하고 간단합니다. 0은 위선이고 그 외 모든 것은 진실입니다.

따라서 -1은 진실이며 논리 부정이 발생하면 우리는 거짓이됩니다.

따라서이 문은 포팅 가능하게 거짓입니다.

+0

'! '연산은 항상 순서대로 마지막으로 적용된 연산인가? –

4

표준 C에서 0이 아닌 (양수/음수) 값은 TRUE입니다.

그래서 (-1)은 TRUE로 평가되고,! (- 1) of-course는 FALSE로 평가됩니다. 따라서 if (! (- 1))가 FALSE로 평가됩니다.

+1

세부 사항 : "표준 C에서는 0이 아닌 (양수/음수) 값이 모두 참입니다." -> 닫습니다. 다양한 오브젝트에는 음수, 양수, 0, NAN, 널 포인터, 널이 아닌 포인터, 컴플렉스 등의 값이 있습니다. '! '에 대해서 유일한 질문은 그 값이 무엇인지가 아니라, _가'0 '과 동등한 경우이다. – chux