2011-03-28 36 views

回答

7

i=x<y<z;,被解釋爲​​,這反過來又被解釋爲i=1<z,其計算結果爲1

+0

似乎是一個相當常見的錯誤,至少GCC(也可能是其他編譯器)也打印出警告,如果警告被啓用:警告:比較像X <= Y < = Z'沒有它們的數學含義 – Saytonurn 2011-03-28 17:06:33

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 2011-03-28 13:56:14

+0

我設置了大括號來說明編譯器如何解釋代碼 – 2011-03-28 14:01:28

0

輸出什麼沒有你想?

在C中,

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

如果條件評估爲假時,返回值是0,否則爲1。 (x <y)<z)。

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

操作方式如下: 由於<是一個邏輯表達式,即x<y10<20爲真即1。所以它變得1<z1<5這又是真,即其被轉讓給i 1。所以i是1.

0

C++不支持這樣的多部分比較。

x < y < z 

被解釋爲

(x < y) < z 

或即,確定是否x < y,然後看看是否布爾小於z

有一些討論,爲什麼over at the software engineering StackExchange

當你發現自己試圖做到這一點,而不是你需要把它寫成一個布爾加入了兩個獨立的比較:

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