我有以下代碼:關於產品X = Y ==ž
#include <stdio.h>
int main(void)
{
int x = 2, y = 6, z = 6;
x = y == z;
printf("%d", x);
}
輸出爲= 1
爲什麼呢?
我有以下代碼:關於產品X = Y ==ž
#include <stdio.h>
int main(void)
{
int x = 2, y = 6, z = 6;
x = y == z;
printf("%d", x);
}
輸出爲= 1
爲什麼呢?
由於賦值是從右到左,並且==的優先級大於=。
它爲x =(Y == Z)
ý== z爲1
x = y == z
讀取爲x = (y == z)
,並且y和z均爲6,因此它們是相等的。 true
是1,所以x是1
x = y == z;
是一回事x = (y == z);
和y == 6
和z == 6
,(y == z) == 1
所以x == 1
y == z
值爲true,您指定給x
...... x = true
強制轉換成值爲1,因爲x
的類型爲int
。
沒有演員,對吧?標記爲C和C沒有布爾類型。 – Ishtar 2010-08-30 12:58:23
哦,你們都錯了。 C * does *具有布爾類型,但這裏沒有演員。 – 2010-08-30 13:04:54
它evals ==操作者首先,所以因爲y == z是真實的,並且x爲int,x被設定爲1(真)
Ŷ== Z => 6 == 6 =>真
真表示爲整數(%d)爲1
比較(==
)具有比賦值更高的優先級(=
),所以您的中間語句被處理爲x = (y == z)
;並且真實比較的結果是1,它被分配給x。
==比=具有更高的優先級。所以x = y == z實際上是x =(y == z)。現在y和z都是6.所以比較是正確的,結果是1,它被設置爲x。
==的結果是一個布爾值和真= 1。 – kenny 2010-08-30 12:52:51
你知道問這個問題的人嗎 - 你是兩個同班同學嗎? http://stackoverflow.com/questions/3598977/meaning-of-this-code-closed – Amarghosh 2010-08-30 12:54:43
家庭作業標籤失蹤? – tibur 2010-08-30 12:55:12