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

标签 c bitwise-operators operator-precedence

给出&、^和|背后的原因是什么? 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 都建议在 &&& 两边加上括号,以避免人们阅读代码时感到困惑。

关于c - 为什么按位 'and' 、 'xor' 和 'or' 具有不同的优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70750773/

相关文章:

Perl5 =(等于)运算符优先级

c++ - 多个 LD_REPLOAD 共享变量

c - 特殊字符串

c - 在C中,指向需要访问字节指针列表的结构的指针

组合宏会产生错误

java - 位循环移位

java - 位或运算符以不同方法工作的详细解释

c - 为什么这些构造使用增量前和增量后未定义的行为?

c# - 如何重置ulong中的单个位?

c - 为什么这些构造使用增量前和增量后未定义的行为?