C的遗产:按位运算符与等于运算符的优先级

Zau*_*bov 9 javascript c bit-manipulation equality

我偶然发现了使用按位运算符的JavaScript情况.逻辑上,按位运算符应该具有比等于运算符更高的优先级,例如

if val & 10 == 10
   alert('flag set')
Run Code Online (Sandbox Code Playgroud)

但看起来这个代码会以另一种方式工作,因为在JavaScript中,按位运算符的优先级低于等式运算符(参见Mozilla的JS参考).上面的代码总是返回0任何有效的数值val,因为结果val & true0.因此,正确的方法是将括号放在按位表达式周围:

if (val & 10) == 10
   alert('flag set')
Run Code Online (Sandbox Code Playgroud)

我挖出了这个问题的历史,看起来这种行为来自于K&R的C时代,其中逻辑&&||运算符是按比例添加的.就C中的逻辑陈述而言:

if (x == 1 & y == 0) {
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

有一个完美的感觉.但它在按位逻辑方面没有任何意义.

C++,Java,Objective-C,PHP,C#,最后Javascript也有同样的方式.Python,Ruby,Go反过来说.

您是否知道任何原因(除了来自C的遗产之外)使编程语言的设计者遵循C的优先规则?