c - 如何计算这些 C 表达式?

标签 c

首先这是我正在研究的问题:

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,我在终端上尝试了它,它将 xy 更改为 0 .

我错过了什么?

最佳答案

  1. 在 C 中,任何数字类型都可以计算为 bool,对于此类类型,任何非零值都是“true”。因此,由于字符 'm' 不为零(只有 '\0' 为零),因此它是“true”

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

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

关于c - 如何计算这些 C 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46634499/

相关文章:

c - CGO对“TIFFGetField”的 undefined reference

c -\% 和 %% 之间的区别

C 字符串声明

c - 使用可移植 int

c - 3d 加速度计计算方向

c - 在 C 中使用 setjmp 和 longjmp 是好的编程习惯吗?

c - for循环执行时间不同条件

c - 以微秒为单位获取 C 中的时间戳?

c - 为什么 'continue' 语句忽略了 'while' 循环中的循环计数器增量,但在 'for' 循环中却没有?

c - Go TCP 读取是非阻塞的