2

根据维基百科,按位与运算符的优先级高于按位或。然而 wolfram 说它们是等价的。以下两个表达式是否等价?

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

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

4

3 回答 3

4

理论上,任何语言或逻辑系统都可以规定其运算符的优先级。但是,在我熟悉的所有语言中,按位(和逻辑,就此而言)AND 的优先级高于 OR。

鉴于 & 和 | 是基本运算符,并且至关重要的是 (a & b) | c = d 并不意味着 a & (b | c) =d,任何真正的语言似乎都不太可能不定义它们的相对优先级。

于 2013-10-30T20:51:20.080 回答
2

我不认为它们具有自然优先级,不像说乘法和除法比减法和加法具有更高的优先级,因为它们可以从减法和加法构建。

在 C&中具有更高的优先级,|因此您的两个语句不等效。我猜大多数具有类 C 语法的语言都会继承自它。

于 2013-10-30T20:55:54.693 回答
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

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

其他语言的位运算符的一些示例,高->低

  • Python:和,异或,或
  • C++:与、异或、或
  • Golang: and, xor == or (左结合)
  • 帕斯卡:和,或
  • Swift: and, xor == or (左结合)
  • 飞镖:和,异或,或
  • Javascript:和,异或,或

参考:

于 2017-05-20T23:14:17.070 回答