This question already has answers here:
Why does “++x || ++y && ++z” calculate “++x” first, even though operator “&&” has higher precedence than “||”

(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=3k=1 。它将返回 true,因此 || 变为 true,因此不应评估 ++i。但它以其他方式工作。

我希望其他人向我解释。

最佳答案

具有更高的优先级并不意味着它首先被评估。这只是意味着它结合得更紧密。在该示例中,该表达式等效于: ++i || (++j && ++k) 。首先评估的是 ++i 因为 || 从左到右评估。只有当结果为 false 时才会对 ++j && ++k 进行评估,因为 || 是短路的。

关于c - && 和 ||运营商,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7713330/

10-13 07:04