我无法弄清楚逻辑运算符“not”(~
/ !
)在括号前面的作用。
这是任务:
我有a = 1
,b = 2
和c = 2
。
和if
声明:
if (a ~= b | a ~= c) &&
的〜 (a ~= b && a ~= c && b ~= c)
在括号之前使用逻辑运算符“not”是什么意思(查看粗体~
)?
答案 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
是逻辑expr1
(0
),则不会评估false
。当我们评估时会发生同样的情况expr1 || expr2
,如果expr2
是逻辑expr1
(1
),则不评估true
。
符号|
和||
在MATLAB应用程序中执行不同的操作。符号|
是元素方式的OR运算符。短路OR运算符为||
。意味着如果我们有例如expr1 || expr2
,则会评估expr1
和expr2
。 &
逐元AND运算符也是如此。
现在,让我们看一下你要求的表达式:
if (a ~= b | a ~= c) &&~(a ~= b && a ~= c && b ~= c)
了解:a = 1
,b = 2
和c = 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
的最终结果是1
(true
)。
希望它有用!
答案 1 :(得分:1)
我将尝试补充学术界的答案 - 评估顺序很重要,每个逻辑运算符都有它的优先权。在Matlab中,否定运算符'〜'not()具有比其他逻辑运算符更高的优先级。在这种情况下,表达式a ~= b && a ~= c && b ~= c
将在否定运算符之前作为一个整体进行求值,因为它被放在括号内。该表达式可以理解为“所有三个变量都具有不同的值”。通过将其放在括号内并对其进行否定,您会得到“并非所有三个变量都具有不同的值”。如果没有括号,您将获得not(a) ~= b && a ~= c && b ~= c
。另请注意,比较运算符的优先级高于&&。
希望它有所帮助。