poi*_*ida 39 c bitwise-operators operator-precedence
在C编程语言中,为什么按位运算符(&和|)的优先级低于等于运算符(==)?这对我来说没有意义.
Cal*_*ain 52
你需要问Brian Kernighan或Dennis Ritchie.
来自这个论坛:http://bytes.com/topic/c/answers/167377-operator-precedence
&&和|| 后来因为"短路"行为而加入了运营商.Dennis Ritchie回想起,在添加逻辑运算符时,应该更改位运算符的优先级.但是由于当时存在几百千字节的C源代码,并且安装了三台计算机,Dennis认为C语言的改变太大了......
那么,这可能是一个原因?我猜测,因为有几个按位优先级(与关系比较不同),因为......永远存在......而且从未纠正过.
Mic*_*ius 16
回想起来,丹尼斯·里奇也没有任何意义.
http://www.lysator.liu.se/c/dmr-on-or.html
&&和|| 在|之后被添加到语言中 和&,并且出于兼容性原因保留了优先级.
对于 K&R 为什么选择他们所做的优先级,我没有权威的答案。一个相当有意义的例子是这个:
if (x == 1 & y == 0) {
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
由于这是按位 AND 运算符,因此它使用非短路评估模式,就像
if (x == 1 | y == 0) {
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
使用非短路 OR 运算符。这可能是他们选择以这种方式设置优先组的原因,但我同意你的看法,回想起来这似乎不是一个好主意。