2017-10-08 96 views
-1

首先這是我的工作的問題:如何評估這些C表達式?

評估下列各表達式中C:

int x=1, y=7, z=0; 
char a='m'; 

1)a ? y-x : x–y
2)x = 5 ? (y = z) : (z = y)

我明白其餘的問題,但號碼(1)混淆了我......是不是它應該是一個邏輯表達式? 我的意思是'm'不能是真的也不是假的;我怎樣才能回答這個問題?它只是「錯誤」?還是有我錯過的東西?

對於數(2)(z=y)應該執行其改變z至7,但是不是應該是x == 5和我嘗試了在終端上和它的變化既xy0的發言。

我錯過了什麼?

+3

''m''是非零,麥角它的計算結果爲TRUE;。 – UnholySheep

+1

您可能想了解[*運算符優先級*](http://en.cppreference.com/w/c/language/operator_precedence)。 –

+0

請注意,不會執行'z = y'; 'y = z'會被執行 - '(test)? if-true:if-false;'是三元結構。 –

回答

5
  1. 在C中任何數值類型都可以評估爲bool,對於這樣的類型,任何非零值都是'true'。如此以來,字符'm'非零(僅'\0'爲零),它是「真實的」

  2. 優先級 - 在C所有運營商有優先級和:雖然比大多數低,比賦值運算符高? 。所以這個表達式是等效於:

x = (5 ? (y = z) : (z = y))