2013-10-30 46 views
2

根据wikipedia,按位AND运算符的优先级高于按位OR。但是钨狼说他们是相同的。以下两个表达式是否相同?按位运算符优先顺序

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

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

+0

操作的顺序将取决于语言。我将['c AND a OR b'](http://www.wolframalpha.com/input/?i=truth+table+c+and+a+or+b)插入Wolfram Alpha,它给了我'( c和a)或b'。另外['c OR a AND b'](http://www.wolframalpha.com/input/?i=truth+table+c+or+a+and+b)给了我'c OR(a AND b) '因此看起来像在Wolfram Alpha中'AND'具有比'OR'更高的优先级。这些是逻辑运算符而不是按位,但我认为他们会遵循相同的模式。 – NullUserException

+0

@NullUserException我认为这种间接引发了一个可能有趣的地方:在C和C++中,逻辑操作总是明确地从左到右评估,只要结果是已知的,评估就会结束(所以在&&右侧没有评估如果左侧评估为零;在任何“||”中,如果左侧评估为非零,则不评估右侧)。按位运算符优先,并且没有关于避免评估子表达式的特殊规则。 – Tommy

+1

你可以看到&,^和|作为分别乘法,加法和最大值的逐位版本。这种理由证明了他们使用最广泛的优先顺序。 – harold

回答

3

从理论上讲,任何语言或逻辑系统都可以规定其运营商的优先级。然而,在我熟悉的所有语言中,按位(并且对于该事情是合乎逻辑的)AND具有比OR更高的优先级。

鉴于&和|是基本的运营商,并且至关重要的是(a)& b) c = d并不意味着&(b | c)= d,任何真正的语言都不会使其相对优先级不确定。

2

我不认为它们有自然的优先权,不同的是,乘法和除法的优先级比减法和​​加法优先,因为它们可以从减法和加法中构建。

In C & has higher precedence than |所以你的两个陈述是不相等的。我猜想大多数C语言的语言都会从中继承。

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指南中。

Ref1至:https://reference.wolfram.com/language/tutorial/OperatorInputForms.html

至Ref2:http://reference.wolfram.com/language/guide/BitwiseOperations.html

用于从其他语言按位运算符的一些例子,高 - >低

  • 的Python:与,异或,或
  • C++:与,xor或
  • Golang:and,xor == or(left associative)
  • 帕斯卡:和,或
  • 夫特:与,异或==或(左结合)
  • 达特:与,异或,或
  • 使用Javascript:与,异或,或

参考文献: