c - 了解 C 中的运算符

标签 c operators

<分区>

我对运营商的一个基本问题感到震惊。问题来了

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) , jk 不递增。所以i变为4jk保持初始值21

|| 运算符的结果是0(假)或1(真);由于条件为真,值 1 被分配给 m

结果:

4 2 1 1

关于c - 了解 C 中的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30271534/

相关文章:

对这个c程序的输出感到困惑

C# LINQ Orderby - 真/假如何影响 orderby?

Python:>>= 做什么?

c - C中模数(数学函数)的等价物?

c - C 中使用信号量的多线程生产者和消费者

c - 结构的指针算法

c - 指针类型数组与指针不兼容

c - 表达式 a<=20?b=30 怎么写 :c=30; such that 30 is used only once?

c - 将程序返回到预触发状态

c++ - 1.#INF00、-1.#IND00 和 -1.#IND 是什么意思?