有人可以解释其原理,为什么在一堆最流行的语言中(请参见下面的注释),比较运算符(==,!=,<,>,<=,> =)的优先级要高于按位运算符(&,|,^ ,〜)?
我认为我从未遇到过这种优先次序自然的用途。总是这样的:
if( (x & MASK) == CORRECT ) ... // Chosen bits are in correct setting, rest unimportant
if( (x ^ x_prev) == SET ) // only, and exactly SET bit changed
if( (x & REQUIRED) < REQUIRED ) // Not all conditions satisfied
我要使用的情况:
flags = ( x == 6 | 2 ); // set bit 0 when x is 6, bit 1 always.
几乎不存在。
语言设计者决定这种运算符优先级的动机是什么?
例如,除SQL外,排名前12种语言中的所有语言都与langpop.com 上的“ 编程语言流行度”列表上的语言相同:C,Java,C ++,PHP,JavaScript,Python,C#,Perl,SQL,Ruby,Shell,Visual Basic。
[arithmetics] [logic operator] [arithmetics]
。大多数程序员不喜欢创造括号乱七八糟的if(((x+getLowX()) < getMinX) || ((x-getHighX())>getMaxX())))
-大多数会认为在逻辑算术的优先级和写if( ( x + getLowX() < getMinX ) || ( x - getHighX() > getMaxX() ))
假设的优先级+
以上<
。现在直观上if( x ^ getMask() != PATTERN )
应该表现出相同的行为,XOR是算术运算符。它被解释为if( x ^ ( getMask() != PATTERN ) )
完全违反直觉的事实。