首先这是我正在研究的问题:
Evaluate each of the following expressions in 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'
不能是 true 也不能是 false;我该如何回答这个问题?仅仅是“错误”吗?或者我错过了什么?
对于数字(2),应该执行语句(z=y)
,将z
更改为7,但这不是应该的吗为 x == 5
,我在终端上尝试了它,它将 x
和 y
更改为 0
.
我错过了什么?
最佳答案
在 C 中,任何数字类型都可以计算为 bool,对于此类类型,任何非零值都是“true”。因此,由于字符
'm'
不为零(只有'\0'
为零),因此它是“true”优先级——C 中的所有运算符都有优先级,而 ?: 虽然低于大多数运算符,但高于赋值运算符。所以这个表达式相当于:
x = (5 ? (y = z) : (z = y))
关于c - 如何计算这些 C 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46634499/