2011-03-28 7 views

답변

7

i=x<y<z;이, 당신이 무슨 짓을했는지 출력 1.

+0

오히려 일반적인 실수, 적어도 GCC 것으로 보인다 방법을 설명하기위한 중괄호 설정은 경고를 출력 :'경고 : 비교를 X < '처럼 = Y를 < = Z '는 수학적 의미가 없다' – Saytonurn

0

코드가로 평가하기 때문이다 :

void main() 
{ 
    int x=10,y=20,z=5,i; 
    i=((x<y)<z); //(x<y) = true = 1, (1 < 5) = true 
    printf("%d",i); 
} 
+0

어떻게 코드를 변경 및 평가에 대해 이야기 할 수 있습니까? 경고가 활성화 된 경우 – Sadique

+0

내가 (너무 아마 다른 컴파일러) 컴파일러 해석 코드 –

0

로 평가 차례로 i=1<z으로 해석됩니다 i=(x<y)<z,로 해석됩니다 필요? 조건이 거짓으로 평가되면 C에서

,

i = 2 < 3; //i == 1. 
i = 4 < 3; //i == 0. 

, 리턴 값은 0, 1, 그렇지 않은 것이다. < Z는 ((X < Y) < z)으로 평가한다 Y
또한 <을 X.

2

10이 20보다 작 으면 1이고 1은 5보다 작아서 1이됩니다. C는 다른 언어처럼 관계 연산자를 연결하지 않습니다. 다음

0
x<y // 1 as (10 < 20) will return 1 
result of(x<y)<z // 1 as (1<5) will return 1 
1

그것은 작동 : < 이후 논리적 표현, 즉 10<20x<y 해당 즉 1이다 그래서 즉 i에 할당 된 1 다시 사실 1<z1<5된다. 그래서 i 그런 여러 부분으로 비교를 지원하지 않습니다 ++ 1.

0

C입니다.

x < y < z 

(x < y) < z 

로 해석되거나 그 후, x < y 여부를 결정하는 부울 미만 z 있는지된다.

에 대한 설명이 인 이유는 over at the software engineering StackExchange입니다.

당신은 자신이 일을하려고 찾아, 대신 당신은 부울에 합류 두 개의 비교로 작성해야합니다 :

(x < y) && (y < z)