2013-07-25 3 views
1
int main() 
{ 
    int var1=4, var2=6; 
    var2=var2||var1++&&printf("computer world"); 
    printf("%d%d",var1,var2); 
    getch(); 
} 

인쇄 된 대답은 41입니다.c 논리 연산자를 사용하는 프로그램

질문 :
여기에는 '컴퓨터 세계'가 인쇄되지 않습니다. 우선 순위에 따라 && 논리 연산자를 계산해야하지만 여기의 동작은 이와 같지 않으며 그 문 뒤에는 var1 값이 증가하지만 증가하지 않아야합니다. 예상 답변은 computer world51입니다.

+1

이는 적어도 하나 개의 최근 질문의 중복, 이상 가능성이 몇 가지있다 사람. 우선 순위 대 실행 순서의 문제입니다. –

+0

Google에 소스 코드를 붙여 넣기 만하면됩니다. 같은 질문을 가진 여러 사이트를 찾을 수 있습니다. –

+1

[운영자 우선 순위 문제] (http://stackoverflow.com/questions/7212482/problem-with-operator-precedence). 또 다른 하나는 [우선 순위가 낮은 연산자가 먼저 실행하는 이유] (http://stackoverflow.com/questions/12152143/why-lower-precedence-operator-executes-first)입니다. –

답변

6

"우선 순위"하지 남아

그래서 var2 1이된다. 우선 순위는 평가 순서와 동일하지 않습니다.

||&& 연산자 short-circuit

이후, (6은 비 - 제로이므로) VAR2가 진정한 것으로 간주되며, 후행 증가 동작이나 함수 호출도 평가된다. 명령문 있도록

+0

+1 링크가 꽤 빠릅니다. :). 그리고 더 잘 설명하려면 15 초가 더 걸렸습니다. – 0decimal0

+0

+1 단락 회로 평가 용 –

0

||은 첫 번째 피연산자가 true로 평가되면 더 이상 실행되지 않으면 단락 회로 연산자입니다. (VAR2가 처음 6이며, 작업이 진정한로 평가하기 때문에 ) 더 증가 그렇게 var1 발생하지, 그것은 "우선 순위"라고 4.

0

||는 지름길이다 var 이후

var2=var2||var1++&&printf("computer world"); 

이 참으로 평가 6의 값을 갖고, 후자의 식 var1++&&printf("computer world");는 실행되지 않을 것이다.

1

|| 연산자는 첫 번째 값이 인지 확인합니다. true이면 논리 표현식의 두 번째 부분을 평가하지 않으므로 printf 문은 텍스트를 출력하지 않습니다. 이것은 단락 회로 조작이라고합니다.

var2||( var1++&&printf("computer world") ) 

|| 후 모든 부품이

을 무시하지 않습니다 제로 VAR2입니다 그래서 이후 :

아래의 코드는

#include<stdio.h> 

int main() 
{ 
    int var1=4,var2=0; 
    var2=var2||var1++&&printf("computer world"); 
    printf("%d%d",var1,var2); 
    getch(); //remove getch if you are working on gcc 
} 
+2

또한 'var1 ++'을 실행하지 않습니다. –

+0

Sir @JonathanLeffler 위의 변경을했고 예상대로 작동합니다. –

+1

'예상대로'관련 행동이 무엇인지 물어봐야하는지 잘 모르겠습니다. 'var2'가 0 (거짓)이므로 후행 증가가 발생하지만 반환 된 값은 4 (이전 증분 값)이기 때문에 코드 조각은'computer world51'을 출력해야하므로'&&'조건은 함수를 평가해야합니다 '컴퓨터 월드'를 출력하고 인쇄 된 문자 수인 14를 반환합니다. 따라서 전체 표현식은 1 (거짓)으로 평가되고, 'var2'는 1로 지정되고, 'var1 == 5'및 'var2 == 1'값으로 이어진다. 제 2의'printf()'형식의 끝에 개행 문자가 있어야 정상적인 동작을 얻을 수 있습니다. –

1

var2||var1++&&printf("computer world")가로 평가됩니다 예상 된 결과를 제공합니다.

결과가 true입니다. 1이고 var2에 할당됩니다.

0

재미 :

#include"stdio.h"                                       
    main() 
    { 
     int var1=4,var2=6; 
     var2=printf("step1")&&var2||printf("step2")||var1++&&printf("step3"); 
     printf("%d%d\n",var1,var2); 
     var2=printf("step1")&&var2&&printf("step2")||var1++&&printf("step3"); 
     printf("%d%d\n",var1,var2); 
     var2=printf("step1")&&var2&&printf("step2")&&var1++&&printf("step3"); 
     printf("%d%d\n",var1,var2); 
     // getch(); 
    } 

결과는 다음과 같습니다

step141

step1step241

step1step2step351

관련 문제