给出&、^和|背后的原因是什么? C 中不同的优先级?我要求使用 C,因为大多数现代语言都继承了 C 的类似优先级。但我对 C 之前的语言了解不多。除此之外,为几乎相同的操作分配不同的优先级对我来说似乎是违反直觉的。
我听说,一开始C语言没有逻辑运算符。在这种情况下,它们可能使用相同的逻辑运算符和按位运算符,因此它们可能最终具有不同的优先级。但在这种情况下,是否有任何语言(可能与 C 并存或先于 C 存在)将所有三个运算符置于同等优先级?
最佳答案
In boolean logic, a disjunctive normal form (DNF) is a canonical normal form of a logical formula consisting of a disjunction of conjunctions; it can also be described as an OR of ANDs, a sum of products, or (in philosophical logic) a cluster concept.[citation needed] As a normal form, it is useful in automated theorem proving.
[...]
For example, all of the following formulas are in DNF:
- (A ∧ ¬B ∧ ¬C) ∨ (¬D ∧ E ∧ F)
该示例的 C 等效项是:
(A && !B && !C) || (!D && E && F)
由于 DNF 是一种非常有用的规范形式,因此使逻辑 AND 的优先级高于逻辑 OR 是有意义的,因此以下是 DNF:
A && !B && !C || !D && E && F
那么对于按位与和按位或遵循相同的模式就有意义了。至于按位异或我只能推测,所以我不会在这里这样做。
有趣的事实:gcc 和 clang 都建议在 &&
和 &
两边加上括号,以避免人们阅读代码时感到困惑。
关于c - 为什么按位 'and' 、 'xor' 和 'or' 具有不同的优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70750773/