【转】Matlab中的逻辑运算"&&"与"&","||"与"|"的区别
(2009-12-06 20:59:06)
标签:
杂谈 |
逻辑运算符:
& |
与 |
| |
或 |
~ |
非 |
p |
(~p)
p &
(~p)
any和all函数在连接操作时很有用,设x是0-1向量,如果x中任意有一元素非零时,any(x)返回“1”,否则返回“0”;all(x)函数当x的所有元素非零时,返回“1”,否则也返回“0”.这些函数在if语句中经常被用到.如:
另外,还有"&&"和"||"运算符,Matlab中的逻辑运算"&&"与"&","||"与"|"的区别如下:
&&和||被称为&和|的short circuit形式,
A&B
(1)首先判断A的逻辑值,然后判断B的值,然后进行逻辑与的计算。
(2)A和B可以为矩阵(e.g. A=[1 0],B=[0
0])。
A&&B
(1)首先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假,就不需要再判断B的值。
(2)A和B不能是矩阵,只能是标量。
"|"与“||”同理。
A&&B
首先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假,就不需要再判断B的值。这种用法非常有用,如果A是一个计算量较小的函数,B是一个计算量较大的函数,那么首先判断A对减少计算量是有好处的。另外这也可以防止类似被0除的错误:
flag=denum~=0 &&
num/denum>10
if flag
end if
上面的表达式就可以防止denum等于0的情况。当然,如果你希望在判断的时候,对A和B表达式都进行计算,就应该使用标准的&或者|。Matlab中的if和while语句中的逻辑与和逻辑或都是默认使用short-circuit形式。
if flag=denum~=0 &&
num/denum>10
end if
与
if flag=denum~=0 &
num/denum>10
end if
执行的结果一样
符号
+
-
.*
*
^
.^
.
.
kron
,
;
(b)在创建矩阵的语句中指示一行元素的结束,例如m=[x y z;i j k]
:
(b)a(,j)表示j列的所有行元素;a(i,)表示i行的所有列元素;a(13,4)表示第四列的第1行至第3行元素
()
[]
{}
%
'
(b)向量或矩阵的共轭转置符
.'
...
=
==
<,>
&
~
xor
符号
+
-
.*
*
^
.^
.
.
kron
,
;
(b)在创建矩阵的语句中指示一行元素的结束,例如m=[x y z;i j k]
:
(b)a(,j)表示j列的所有行元素;a(i,)表示i行的所有列元素;a(13,4)表示第四列的第1行至第3行元素
()
[]
{}
%
'
(b)向量或矩阵的共轭转置符
.'
...
=
==
<,>
&
~
xor