2

>=和 '>' 优先级高于的直观原因是什么|参考。我可以理解为什么||写作a>b||c很普遍,为什么会更低。但是我认为a>b|c在比较之前会做一个 OR 。这似乎并不直观。有哪些&^|优先级较低的例子,然后比较/权益运算符是直观的?

4

1 回答 1

7

这是一个历史性的意外,丹尼斯·里奇在《C 语言的发展》中写道:

他们迟到的介绍解释了 C 的优先规则的不合理性。在 B 中写道

    if (a==b & c) ...

检查 a 是否等于 b 且 c 是否非零;在这样的条件表达式中,& 的优先级低于 ==。在从 B 转换为 C 的过程中,人们想在这样的语句中用 && 替换 &;为了使转换不那么痛苦,我们决定保持 & 运算符相对于 == 的优先级相同,并且只是将 && 的优先级与 & 稍微分开。今天,似乎最好移动 & 和 == 的相对优先级,从而简化一个常见的 C 习惯用法:要测试一个掩码值与另一个值,必须编写

    if ((a&mask) == b) ...

其中内括号是必需的,但很容易忘记。

所以这是因为 B 使用|and&用于逻辑运算符,而 C 保留了如此表示的位运算符的优先级。

于 2012-10-11T22:00:18.470 回答