这是代码
int main()
{
int i=-3, j=2, k=0, m;
m = ++i||++j&&++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
return 0;
}
并输出: -2、2、0、1
但是我不明白m = ++i||++j&&++k;
行是如何执行的。
有人请解释。谢谢!
答案 0 :(得分:6)
最初,您有4个变量:
m = ++i||++j&&++k;
从左到右执行。所以第一个是++i
-我建议阅读有关differences between i++ and ++i的信息-在这种情况下,i
增加1并成为i = -2
-2是true
表达式,因此m变为1,并且不对该表达式的其余部分求值。因为无论如何true or anything else
始终为真。
所以最终结果:
答案 1 :(得分:2)
逻辑OR
操作(expr1 || expr2)
采用short-circuiting行为。也就是说,如果expr2
是逻辑expr1
1
,则不会评估(true)
。
如果两个操作数中的任何一个都不为零,则具有逻辑OR
运算符的表达式的求值为true
。
在此表达式中:
m = ++i||++j&&++k;
|_| |______|
LHS RHS
i
用-3
初始化。 ++i
将得出-2
。
-2
是一个非零值,因此求值为逻辑true
,并且表达式的RHS部分将不求值。
由于整个表达式的求值为true
,因此将值1
分配给m
。