>=
和'>'的优先级高于|
的直观原因是什么?参考我能理解为什么||
更低,因为写a>b||c
很常见。然而,我认为a>b|c
会在比较之前进行OR运算。这似乎并不直观。&^|
的优先级低于直观的比较/权益运算符的例子有哪些?
这是一个历史事故,Dennis Ritchie在《C语言的发展》中写道:
它们的延迟引入解释了C的优先级规则的不合法性。在B中写入
if (a==b & c) ...
检查a是否等于b,c是否为非零;在这样的条件表达式中,最好&优先级低于==。在从B到C的转换中,人们希望取代&由&;在该声明中;为了减少转换的痛苦,我们决定保留&运算符相对于==相同,并且仅拆分&;从&。今天,似乎更可取的做法是将&和==,从而简化了一个常见的C习惯用法:要针对另一个值测试一个掩码值,必须编写
if ((a&mask) == b) ...
其中需要内括号,但很容易忘记。
所以这是因为B使用|
和&
作为逻辑运算符,而C保留了这样表示的按位运算符的优先级。