根据wikipedia,按位AND运算符的优先级高于按位OR。然而,沃尔夫拉姆说它们是等价的。以下两个表达式是否等效?
C & A | B
C & (A | B)
我的想法是,因为我相信它们是相同的和&具有相同的优先级,因此我们只是从左到右进行评估。
答案 0 :(得分:3)
理论上,任何语言或逻辑系统都可以决定其运营商的优先级。但是,在我熟悉的所有语言中,按位(并且逻辑地说)并且具有比OR更高的优先级。
考虑到&和|是基本的运营商,至关重要的是,(a& b)| c = d并不意味着& (b | c)= d,任何真正的语言似乎都不太可能使其相对优先级未定义。
答案 1 :(得分:2)
我不认为他们有一个自然的优先权,不像说乘法和除法优先于减法和加法,因为它们可以通过减法和加法来构建。
In C &
has higher precedence than |
所以你的两个陈述不等同。我猜大多数具有类C语法的语言都会继承。
答案 2 :(得分:0)
如果你给Wolfram Alpha'|'和'&'它会将它转换为按位函数,如BitAnd(x,y)和BitOr(x,y)。二元运算符的表达式是模糊的,但它会变成不模糊的函数。
示例:1 & 2 | 3
将更改为BitOr[BitAnd[1,2],3]
,并且只有一种方法可以评估这些功能。正如上述评论者指出的那样,Alpha正在推出&以上|优先。
链接:http://www.wolframalpha.com/input/?i=1+%26+2+%7C+3
有趣的是,这个翻译二元运算符'|'的特性和'&'似乎 未记录 ,因为它没有出现在任何标准的Wolfram指南中。
参考1:https://reference.wolfram.com/language/tutorial/OperatorInputForms.html
参考2:http://reference.wolfram.com/language/guide/BitwiseOperations.html
其他语言的按位运算符的一些示例,high-> low
参考文献: