标准布尔操作顺序

时间:2013-11-22 14:51:17

标签: javascript boolean logic operator-precedence

我正在Javascript中为布尔逻辑编写一个分流码算法,而且我遇到了操作顺序。我允许的操作是:

and, or, implies, equals(biconditional), not, xor, nor, nand

但是,我不知道这些优先级是什么。截至目前,我有:

not>equals>implies>xor>nor>nand>or>and

这是对的吗?我可以使用任何标准,类似于数字的PEMDAS / BODMAS系统吗?

2 个答案:

答案 0 :(得分:2)

您很难找到JavaScript运算符优先级的定义的原因是:

  1. 优先级仅在使用中缀表示法时发挥作用。既然你提到了分流场算法,我就打算用中缀表示法。
  2. 每种语言都可以定义它自己的优先级,因为您创建的是DSL,所以您可以创建优先级,但它必须是一致的。
  3. 这些名称实际上是前缀函数名称,而中缀对于运算符而言比名称更常见。您应该使用运算符而不是函数名称:

      

    和&
      或|
      暗示→
      等于(双条件)↔
      不!   xor⊕
      也不是   nand⊼

  4.   
  5. 在解析时将中缀转换为前缀或后缀,因此如果要构建AST等中间形式,则运算符符号应更改为函数名称。
  6.   
  7. 你没有提到你需要的associativity
  8.      这两个可观的来源之间的差异似乎没有标准。

    Jeffrey D. Ullman的"Foundations of Computer Science"

    逻辑运算符的相关性和优先级

    我们将使用的优先顺序是
    1.不(最高)
    2. NAND
    3. NOR
    4.和
    5.或
    6.含义 7. BICONDITIONAL(最低)

    来自Mathematica

    NOT

    NAND
    XOR
    OR
    NOR
    等效
    IMPLIES

答案 1 :(得分:0)

似乎没有标准。

我有一本书(Digital design by Morris Mano),上面写着NOT>AND>OR。这是一个被接受的意见。

关于其他人,我发现很少有意见。 This guy认为EQUIV是最低的(Wikipedia assist)。但是this guy认为EQUIV位于中间XOR>EQUIV>OR(很少有引用)。

另一个不同意见是关于XOR的地方。这里this third guy同意第二个人:)

简而言之,有两种观点:

1)NOT>AND>NAND>XOR>EQUIV>OR>NOR(忽略NOR

2)NOT>AND>NAND>NOR>OR>IMPLIES>XOR>EQUIV

注意:只有NOT>AND>OR部分才能获得学术认证。