按位运算符优先顺序

时间:2013-10-30 20:46:44

标签: bitmap logic bit-manipulation operator-precedence

根据wikipedia,按位AND运算符的优先级高于按位OR。然而,沃尔夫拉姆说它们是等价的。以下两个表达式是否等效?

C &  A | B
C & (A | B)

我的想法是,因为我相信它们是相同的和&具有相同的优先级,因此我们只是从左到右进行评估。

3 个答案:

答案 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

  • Python:and,xor或
  • C ++:and,xor或
  • Golang:and,xor ==或(left associative)
  • Pascal:和,或
  • Swift:和,xor ==或(左关联)
  • Dart:and,xor,或
  • Javascript:and,xor或

参考文献: