相关疑难解决方法(0)

&& over ||的优先顺序

据我所知,逻辑运算符的&&优先级高于||.在运行代码时:

#include <stdio.h>

int main()
{
    int i = 1, j =1, k = 1;

    printf("%d\n",++i || ++j && ++k);
    printf("%d %d %d",i,j,k);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

给出输出:

1
2 1 1
Run Code Online (Sandbox Code Playgroud)

只有在这样++i || ++j && ++k评估时才有可能:

(++i) || (++j && ++k)
Run Code Online (Sandbox Code Playgroud)

但是,根据运算符优先级规则,它应该被评估为:

(++i || ++j) && (++k)
Run Code Online (Sandbox Code Playgroud)

因此输出应该是:

1
2 1 2
Run Code Online (Sandbox Code Playgroud)

这有什么问题?

注意:根据我的理解,我认为具有更高优先级的运算符如下评估(如果它是左关联的):
1.评估其左表达式
2.然后评估其正确的表达式(如果需要)

我错了吗?

c operators operator-precedence

10
推荐指数
3
解决办法
5097
查看次数

请解释&&和||的优先级之间的明显冲突 和表达式的实际结果

我不明白以下程序的输出:

#include<stdio.h>

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;
}
Run Code Online (Sandbox Code Playgroud)

输出-2 2 0 1代替-2 3 1 1,意味着在表达式之前++i评估(并导致||运算符使其右侧短路),++j && ++k这似乎与&&运算符具有更高优先级的事实相矛盾||.

有人解释原因吗?

c

6
推荐指数
2
解决办法
387
查看次数

标签 统计

c ×2

operator-precedence ×1

operators ×1