这个问题已经在这里有了答案:
9年前关闭。
如果查看C的优先级表,您会发现&&的优先级高于||。
但是,请看下面的代码:
a=b=c=1;
++a || ++b && ++c;
printf("%d %d %d\n",a,b,c);
它打印出“2 1 1”,这意味着将首先对“++ a”进行求值,并且一旦程序看到TRUE,它就在那里停止,因为||的另一侧是什么。并不重要。
但是,由于&&的优先级高于||,因此不应该首先对“++ b &&++ c”求值,然后将结果插回“++ a || result”吗? (在这种情况下,程序将打印“1 2 2”)。
最佳答案
只需用括号想象一下即可:
++a || ++b && ++c;
等于
(++a) || (++b && ++c);
从左到右评估。
如果&&和||具有相同的优先级,看起来像
(++a || ++b) && (++c);
关于c - C中逻辑运算符的优先级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7521607/