【发布时间】:2021-02-25 19:46:59
【问题描述】:
我了解与操作符短路的基本概念,但为什么会这样做
int i = 0, j = -1, k = 1, m;
m = !(i++ && ++j) || ++k;
printf("%d %d %d %d", i, j, k, m);
有 1 -1 1 1 作为输出?具体来说,为什么 j == -1 而不是 0?
我知道已经有人问过类似的问题,但我不明白这个我在任何地方都找不到的具体示例。
【问题讨论】:
-
为什么
j应该是0? -
i++为假,因此&&连词为假,++j未计算。 -
后增量
i++返回 i 的原始值(在增量之前),该值为零。所以&&之后的部分没有被评估(因为捷径)。 -
@dxiv: 你的意思是
i是假的,所以i && ...没有被评估,以此类推。 -
@DavidIlic:能不能把它编译成ASM代码,让我们看看?
标签: c logical-operators short-circuiting logical-or logical-and