對於以下代碼片段,我得到輸出爲1
。我想知道它是怎麼來的?運算符優先級 - 表達式評估
void main()
{
int x=10,y=20,z=5,i;
i=x<y<z;
printf("%d",i);
}
對於以下代碼片段,我得到輸出爲1
。我想知道它是怎麼來的?運算符優先級 - 表達式評估
void main()
{
int x=10,y=20,z=5,i;
i=x<y<z;
printf("%d",i);
}
i=x<y<z;
,被解釋爲,這反過來又被解釋爲i=1<z
,其計算結果爲1
這是因爲你的代碼計算爲:
void main()
{
int x=10,y=20,z=5,i;
i=((x<y)<z); //(x<y) = true = 1, (1 < 5) = true
printf("%d",i);
}
你怎麼能更改代碼和談論的評價? – Sadique 2011-03-28 13:56:14
我設置了大括號來說明編譯器如何解釋代碼 – 2011-03-28 14:01:28
輸出什麼沒有你想?
在C中,
i = 2 < 3; //i == 1.
i = 4 < 3; //i == 0.
如果條件評估爲假時,返回值是0,否則爲1。 (x <y)<z)。
10小於20,結果爲1,1小於5,結果爲1.C不像其他語言那樣鏈式關係運算符。
x<y // 1 as (10 < 20) will return 1
result of(x<y)<z // 1 as (1<5) will return 1
操作方式如下: 由於<
是一個邏輯表達式,即x<y
10<20
爲真即1。所以它變得1<z
即1<5
這又是真,即其被轉讓給i
1。所以i
是1.
C++不支持這樣的多部分比較。
x < y < z
被解釋爲
(x < y) < z
或即,確定是否x < y
,然後看看是否布爾小於z
。
對有一些討論,爲什麼即over at the software engineering StackExchange。
當你發現自己試圖做到這一點,而不是你需要把它寫成一個布爾加入了兩個獨立的比較:
(x < y) && (y < z)
似乎是一個相當常見的錯誤,至少GCC(也可能是其他編譯器)也打印出警告,如果警告被啓用:警告:比較像X <= Y < = Z'沒有它們的數學含義 – Saytonurn 2011-03-28 17:06:33