为什么按位 'and'、'xor' 和 'or' 有不同的优先级?

Why do bitwise 'and', 'xor' and 'or' have different precedences?

给出&、^和|的原因是什么? C中不同的优先级?我要求使用 C,因为大多数现代语言都从 C 继承了类似的优先级。但我对 C 之前的语言了解不多。除此之外,为几乎相同的操作分配不同的优先级对我来说似乎是违反直觉的。

我听说,一开始C没有逻辑运算符。在那种情况下,他们可能对逻辑运算符和按位运算符使用了相同的运算符,因此它们最终可能具有不同的优先级。但在那种情况下,是否有任何语言(可能与 C 并存或存在于 C 之前)将所有三个运算符置于同等优先级?

Disjunctive normal form

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 都建议在 &&& 周围加上括号,以避免人们阅读代码时产生混淆。