按位运算符的优先顺序

问题描述 投票:0回答:3

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

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

我的想法是一样的,因为我相信 |和 & 具有相同的优先级,因此我们只从左到右计算。

bitmap logic bit-manipulation operator-precedence
3个回答
4
投票

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

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


2
投票

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

在 C 中

&
的优先级高于
|
,所以你的两个语句不相等。我猜大多数具有类似 C 语法的语言都会继承它。


1
投票

如果您给 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

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

  • Python:与、异或或
  • C++:与、异或或
  • Golang:与、异或 == 或(左结合)
  • 帕斯卡:和,或
  • Swift:与、异或 == 或(左结合)
  • Dart:与、异或、或
  • Javascript:与、异或、或

参考资料:

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.