布尔代数中的“1 XOR 1 OR 1”是不明确的吗?

时间:2011-12-11 21:13:35

标签: math boolean-logic

使用布尔代数(不是特定的语言实现),我们可以明确地评估1 ^ 1 + 1(或1 XOR 1 OR 1)吗?

我可以推导出两个评估:

 [I]:  (1 ^ 1) + 1 = 0 + 1 = 1
[II]:  1 ^ (1 + 1) = 1 ^ 1 = 0

也许有一些陈述的操作顺序,或者从左到右的评估?或者这不是在布尔代数中定义的吗?

4 个答案:

答案 0 :(得分:3)

我们可以使用the rules of boolean algebra来尝试评估表达式1 XOR 1 OR 1

现在:

  • XOR源自ORA XOR B = (¬A AND B) OR (¬B AND A);
  • Associativity告诉我们A OR (B OR C) = (A OR B) OR C;
  • Associativity还告诉我们A AND (B AND C) = (A AND B) AND C

因此,采用评估顺序的任何可能解释:

  (1 XOR 1) OR 1                       1 XOR (1 OR 1)

即使我们没有定义从左到右的“评估顺序”,但我们需要这些规则来表明两种可能的解释等价:

= (¬1 AND 1) OR (¬1 AND 1) OR 1      = (¬1 AND (1 OR 1)) OR (¬(1 OR 1) AND 1)
= (0 AND 1) OR (0 AND 1) OR 1        = (0 AND 1) OR (0 AND 1)
= 0 OR 0 OR 1                        = 0 OR 0
= 1                                  = 0

除非我忘记了一些至关重要的公理,否则我已经确认你需要更多的上下文来评估给定的表达式。

(当然,检查表达式A XOR B OR CABC当然要复杂得多!但如果表达式是对于所有三个输入中只有一个值是模糊的,那么为什么还要检查其他任何一个?)

此上下文通常在特定于语言的评估顺序规则中提供。 C型语言give XOR a low precedence(Richie不喜欢的东西);相比之下,数学惯例dictates a left-to-right associativity,其中不能应用其他公理,否则会出现歧义。

所以,基本上,由于我们忽略了特定于语言的规则,你可能会选择[I]

答案 1 :(得分:1)

大多数语言都会进行XOR,然后是OR;经验丰富的编码员无论如何都要用括号来表达意图。

更多现代语言执行所谓的快速或短路评估,因此0 & ?始终为0,因此不会评估?;与1 + ?相同。

答案 2 :(得分:0)

我认为逻辑运算符没有普遍认同的优先顺序。评估完全针对某种语言。

答案 3 :(得分:-1)

例如,在c#中,按位运算符的Operator precedence为:

  1. XOR
  2. 但这可能与另一种语言不同。如果优先级相同,则操作从左到右执行。没有逻辑XOR运算符,但您可以使用NOT EQUAL(!=)。