2017-02-01 1 views
0
#include<stdio.h> 

void main() 
{ 
    int a,b,c,d; 
    a=b=c=d=1; 
    a=++b>1 || ++c>1 && ++d>1; 
    printf("%d%d%d%d",a ,b ,c ,d); 
} 

GCC 컴파일러에서 위의 코드의 대답은 왜 그런지 1211가, 누군가가 나를 설명 할 수있다 나에게이 코드의 답을 exlpain 수 있습니까? 여기 a=++b>1 || ++c>1 && ++d>1;사람은 다

+5

연산자 우선 순위 및 * 단락 회로 평가 *에 대해 읽어보십시오. 그러나 나는이 법의 저자로부터 컴퓨터를 사용하도록 법으로 제한 할 것입니다. –

+1

'++ b'는'b'를'2'로 증가시키기 때문에 b가'> 1'이되어 전체 표현식이 참이되므로'a'에'1'이 할당됩니다. 'c'와'd'는 나머지 표현식을 평가할 필요가 없으므로 변경되지 않습니다. –

+0

@EugeneSh. 그것은 프로그래밍 언어의 게으름을 언급하지 않는다? –

답변

3

이 라인

a=((++b>1) || ((++c>1) && (++d>1))); according to precedence. 

연관성 연산 || 기준으로 실행된다에서 좌우되므로 (++b>1)b가 될 것이다 2|| 동작 좌측 증가 얻는다 제 실행될 true이므로 오른쪽이 실행되지 않고 c,d은 변경되지 않습니다.