这个问题已经在这里有了答案:




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/

10-09 07:06