2010-08-30 103 views
-1

我有以下代碼:關於產品X = Y ==ž

#include <stdio.h> 
int main(void) 
{ 
    int x = 2, y = 6, z = 6; 
    x = y == z; 
    printf("%d", x); 
} 

輸出爲= 1

爲什麼呢?

+0

==的結果是一個布爾值和真= 1。 – kenny 2010-08-30 12:52:51

+5

你知道問這個問題的人嗎 - 你是兩個同班同學嗎? http://stackoverflow.com/questions/3598977/meaning-of-this-code-closed – Amarghosh 2010-08-30 12:54:43

+0

家庭作業標籤失蹤? – tibur 2010-08-30 12:55:12

回答

4

由於賦值是從右到左,並且==的優先級大於=。

它爲x =(Y == Z)

ý== z爲1

1

x = y == z讀取爲x = (y == z),並且y和z均爲6,因此它們是相等的。 true是1,所以x是1

0

x = y == z;是一回事x = (y == z);y == 6z == 6(y == z) == 1所以x == 1

1

y == z值爲true,您指定給x ...... x = true強制轉換成值爲1,因爲x的類型爲int

+0

沒有演員,對吧?標記爲C和C沒有布爾類型。 – Ishtar 2010-08-30 12:58:23

+0

哦,你們都錯了。 C * does *具有布爾類型,但這裏沒有演員。 – 2010-08-30 13:04:54

0

它evals ==操作者首先,所以因爲y == z是真實的,並且x爲int,x被設定爲1(真)

1

Ŷ== Z => 6 == 6 =>真

真表示爲整數(%d)爲1

2

precedence table==由具有從=

因此

一個更高的優先級

是相同:

x = (y == z); 

由於y == z爲真(1),得到x1

0

比較(==)具有比賦值更高的優先級(=),所以您的中間語句被處理爲x = (y == z);並且真實比較的結果是1,它被分配給x。

0

==比=具有更高的優先級。所以x = y == z實際上是x =(y == z)。現在y和z都是6.所以比較是正確的,結果是1,它被設置爲x。