#include<stdio.h>
int main()
{
int i=-1, j=-1, k=-1, l=2, m;
m = (i++ && j++ && k++) || (l++);
printf("%d %d %d %d %d", i, j, k, l, m);
}
我对运算符优先级如何在给定程序中的逻辑表达式的评估中起作用感到困惑。
变量m
将被分配0
或1
取决于它后面的逻辑表达式的值。
将评估第一个括号,两个 AND 操作的总体结果将为 true 或1
。但是,由于使用了短路逻辑 OR,因此不会对第二个括号进行评估。
所以,我的问题是,如果括号的优先级高于该表达式中的所有其他运算符,为什么不先评估两个括号,然后执行 OR 操作?也就是说,为什么输出是0 0 0 2 1
而不是0 0 0 3 1
?
编辑:我所问的与这个(建议重复)有些不同,因为我强调括号括住 OR 运算符的第二个操作数。