据我所知,逻辑运算符&&
的优先级高于||
. 在运行代码时:
#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;
}
正在给出输出:
1
2 1 1
只有当++i || ++j && ++k
这样评估时才有可能:
(++i) || (++j && ++k)
但是,根据运算符优先规则,它应该被评估为:
(++i || ++j) && (++k)
因此输出应该是:
1
2 1 2
这有什么问题?
注意:根据我的理解,我认为更高优先级的运算符评估如下(如果它是左关联的):
1. 评估其左侧表达式
2. 然后评估其右侧表达式(如果需要)
我错了吗?