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

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

你需要问问Brian Kernighan或Dennis Ritchie。
从这个论坛: http : //bytes.com/topic/c/answers/167377-operator-precedence

&&和|| 运营商稍后join了“短路”行为。 丹尼斯·里奇(Dennis Ritchie)回想起来,当逻辑运算符被添加时,位运算符的优先级应该被改变。 但是,当时有几百千字节的C源代码和三台计算机的安装基础,丹尼斯认为C语言的变化太大了。

那么,这可能是一个原因? 我猜测,因为有几层按位优先(与关系比较不同),因为它永远存在,永远不会被修正。

回想起来,丹尼斯·里奇也没什么意义。

http://www.lysator.liu.se/c/dmr-on-or.html

&&和|| 在|后添加了语言 和&,并且为了兼容性而保持了优先级。

对于K&R为什么select他们的优先级,我没有一个权威的答案。 一个很有意义的例子就是这样一个例子:

 if (x == 1 & y == 0) { /* ... */ } 

由于这是按位AND运算符,因此它将使用非短路评估模式

 if (x == 1 | y == 0) { /* ... */ } 

使用非短路OR运算符。 这可能就是为什么他们select这样的优先组,但我同意你的看法,回想起来,这似乎不是一个好主意。

Interesting Posts