2017-10-08 105 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))