c - C 中逻辑运算符的优先级

标签 c logical-operators operator-precedence

<分区>

Possible Duplicate:
why “++x || ++y && ++z” calculate “++x” firstly ? however,Operator “&&” is higher than “||”

如果查看 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/

相关文章:

c - 在 C 中使用粘贴运算符 `##` 和类型

c - 使用驱动程序进行 PCI Express 验证

c# - 运算符 '||' 不能应用于类型 'bool?' 和 'bool?' 的操作数

c++ - 函数参数和默认参数的评估顺序

c++ - 是否强制要求短路逻辑运算符?和评价顺序?

c - C 中运算符优先级的含义

C++ 指针增量查询

c++ - 为什么sizeof()编译器返回的值是依赖的?

R:If 语句包含 is.null 作为通过 OR 连接的条件之一

java - 如何/可以同时使用 && 和 ||在相同的 if 语句条件下?