运算符优先级(按位'&'低于'==')

时间:2011-01-13 20:48:09

标签: c bitwise-operators operator-precedence

在C编程语言中,为什么按位运算符(&和|)的优先级低于等于运算符(==)?这对我没有意义。

3 个答案:

答案 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运算符。这可能就是他们选择以这种方式选择优先组的原因,但我同意你的看法,回想起来这似乎不是一个好主意。