根据维基百科,按位与运算符的优先级高于按位或。然而 wolfram 说它们是等价的。以下两个表达式是否等价?
C & A | B
C & (A | B)
我的想法是他们是一样的,因为我相信 | 和 & 具有相同的优先级,所以我们只是从左到右评估。
根据维基百科,按位与运算符的优先级高于按位或。然而 wolfram 说它们是等价的。以下两个表达式是否等价?
C & A | B
C & (A | B)
我的想法是他们是一样的,因为我相信 | 和 & 具有相同的优先级,所以我们只是从左到右评估。
理论上,任何语言或逻辑系统都可以规定其运算符的优先级。但是,在我熟悉的所有语言中,按位(和逻辑,就此而言)AND 的优先级高于 OR。
鉴于 & 和 | 是基本运算符,并且至关重要的是 (a & b) | c = d 并不意味着 a & (b | c) =d,任何真正的语言似乎都不太可能不定义它们的相对优先级。
我不认为它们具有自然优先级,不像说乘法和除法比减法和加法具有更高的优先级,因为它们可以从减法和加法构建。
在 C&
中具有更高的优先级,|
因此您的两个语句不等效。我猜大多数具有类 C 语法的语言都会继承自它。
如果你给 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
其他语言的位运算符的一些示例,高->低
参考: