<分区>
我对运营商的一个基本问题感到震惊。问题来了
int i=3, j=2, k=1, m;
m = ++i || ++j && ++k;
printf("%d %d %d %d", i, j, k, m);
当我处理这个并将答案评估为
4 3 2 1
但 C 对我的 ans 不满意并将上述评估为
4 2 1 1
但是我不明白怎么办。为什么++j 不更新 j 的值。而且++k 不会更新 k 的值。
这里的任何人都请解释它是如何工作的。
<分区>
我对运营商的一个基本问题感到震惊。问题来了
int i=3, j=2, k=1, m;
m = ++i || ++j && ++k;
printf("%d %d %d %d", i, j, k, m);
当我处理这个并将答案评估为
4 3 2 1
但 C 对我的 ans 不满意并将上述评估为
4 2 1 1
但是我不明白怎么办。为什么++j 不更新 j 的值。而且++k 不会更新 k 的值。
这里的任何人都请解释它是如何工作的。
最佳答案
m = ++i || ++j && ++k;
&&
运算符的优先级高于 ||
,因此这等同于:
m = ++i || (++j && ++k);
&&
和||
都是短路运算符;如果左操作数确定结果,则不评估右操作数。由于 ++i
(产生 4
)是“真实的”,因此不评估正确的操作数 (++j &&++k)
, j
和 k
不递增。所以i
变为4
,j
和k
保持初始值2
和 1
。
||
运算符的结果是0
(假)或1
(真);由于条件为真,值 1
被分配给 m
。
结果:
4 2 1 1
关于c - 了解 C 中的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30271534/