This question already has answers here:
Why does “++x || ++y && ++z” calculate “++x” first, even though operator “&&” has higher precedence than “||”
(11 个回答)
2年前关闭。
我遇到了这个代码:
程序返回
我希望其他人向我解释。
(11 个回答)
2年前关闭。
我遇到了这个代码:
int main()
{
int i=1,j=2,k=0,m=0;
m = ++i || ++j && ++k;
printf("%d %d %d %d %d",i,j,k,m);
}
程序返回
2 2 0 1...
。为什么?&&
比 ||
具有更高的优先级,因此应首先评估 ++j && ++k
。因此,我希望 j=3
和 k=1
。它将返回 true,因此 ||
变为 true,因此不应评估 ++i
。但它以其他方式工作。我希望其他人向我解释。
最佳答案
具有更高的优先级并不意味着它首先被评估。这只是意味着它结合得更紧密。在该示例中,该表达式等效于: ++i || (++j && ++k)
。首先评估的是 ++i
因为 ||
从左到右评估。只有当结果为 false 时才会对 ++j && ++k
进行评估,因为 ||
是短路的。
关于c - && 和 ||运营商,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7713330/
10-13 07:04