如何评估这些C表达式?

时间:2017-10-08 18:19:07

标签: 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并且我在终端上尝试了它,它将xy都更改为0

我错过了什么?

1 个答案:

答案 0 :(得分:5)

  1. 在C中,任何数字类型都可以被评估为bool,对于这种类型,任何非零值都是' true'。因此,由于字符'm'非零(仅'\0'为零),因此它是" true"

  2. 优先级 - C中的所有运算符都具有优先级,而?:虽然低于大多数运算符,但高于赋值运算符。所以这个表达式相当于:

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