括号外的逻辑运算符

时间:2014-12-24 20:43:16

标签: matlab if-statement operator-keyword

我无法弄清楚逻辑运算符“not”(~ / !)在括号前面的作用。

这是任务:

我有a = 1b = 2c = 2

if声明:

if (a ~= b | a ~= c) && (a ~= b && a ~= c && b ~= c)

在括号之前使用逻辑运算符“not”是什么意思(查看粗体~)?

2 个答案:

答案 0 :(得分:3)

它起着逻辑否定的作用。它将返回(a ~= b && a ~= c && b ~= c)的逻辑否定。如果(a ~= b && a ~= c && b ~= c)为真,则表示~(a ~= b && a ~= c && b ~= c)为假。反之亦然。

not(A)相当于~A。如果~是逻辑表达式,则符号not(A)的行为类似于A逻辑运算符。放置在~之前的同一符号=就像ne(A)关系运算符一样。

Matlab在处理逻辑运算符&&||时采用短路行为。这意味着,如果我们正在评估expr1 && expr2,那么如果expr2是逻辑expr10),则不会评估false。当我们评估时会发生同样的情况expr1 || expr2,如果expr2是逻辑expr11),则不评估true

符号|||在MATLAB应用程序中执行不同的操作。符号|是元素方式的OR运算符。短路OR运算符为||。意味着如果我们有例如expr1 || expr2,则会评估expr1expr2&逐元AND运算符也是如此。

现在,让我们看一下你要求的表达式:

if (a ~= b | a ~= c) &&~(a ~= b && a ~= c && b ~= c)

了解:a = 1b = 2c = 2

expr1 = (a ~= b | a ~= c) 
      = (1 ~= 2 | 1 ~= 2) 
      = 1 (true)

expr1为true,因此Matlab继续评估expr2:

expr2 = ~(a ~= b && a ~= c && b ~= c) 
      = ~(1 ~= 2 && a ~= c && b ~= c) 
      = ~(1 && 1 ~= 2 && b ~= c) 
      = ~(1 && 1 && 2 ~= 2) 
      = ~(1 && 1 && 0) 
      = ~(0) 
      = 1 (true)

因此expr1 && expr2的最终结果是1true)。

希望它有用!

答案 1 :(得分:1)

我将尝试补充学术界的答案 - 评估顺序很重要,每个逻辑运算符都有它的优先权。在Matlab中,否定运算符'〜'not()具有比其他逻辑运算符更高的优先级。在这种情况下,表达式a ~= b && a ~= c && b ~= c将在否定运算符之前作为一个整体进行求值,因为它被放在括号内。该表达式可以理解为“所有三个变量都具有不同的值”。通过将其放在括号内并对其进行否定,您会得到“并非所有三个变量都具有不同的值”。如果没有括号,您将获得not(a) ~= b && a ~= c && b ~= c。另请注意,比较运算符的优先级高于&&。

希望它有所帮助。