在C编程语言中,为什么按位运算符(&和|)的优先级低于等于运算符(==)?这对我没有意义。
答案 0 :(得分:49)
你需要问Brian Kernighan或Dennis Ritchie 来自此论坛:http://bytes.com/topic/c/answers/167377-operator-precedence
&&和||后来添加了运营商 因为他们的“短路”行为。 Dennis Ritchie承认 回顾一下按位运算符的优先级应该有 在添加逻辑运算符时已更改。但有几个 此时存在的100千字节C源代码和 安装基地的三台电脑,丹尼斯认为它太大了 C语言的变化......
那么,这可能是一个原因?我猜测,因为有几个按位优先级(不像关系比较),因为它永远存在,所以它永远存在...并且从未得到纠正。
答案 1 :(得分:15)
回想起来,丹尼斯·里奇也没有任何意义。
http://www.lysator.liu.se/c/dmr-on-or.html
&安培;&安培;和||在|之后被添加到语言中和&,并且出于兼容性原因保留了优先顺序。
答案 2 :(得分:3)
我没有权威的答案,为什么K& R选择了他们所做的优先权。一个有相当意义的例子就是这个:
if (x == 1 & y == 0) {
/* ... */
}
由于这是按位AND运算符,因此它使用非短路评估模式,如
if (x == 1 | y == 0) {
/* ... */
}
使用非短路OR运算符。这可能就是他们选择以这种方式选择优先组的原因,但我同意你的看法,回想起来这似乎不是一个好主意。