|
MATLABのと||
論理演算子の違いは何ですか?
5 に答える
短絡演算子と要素ごとの演算子のドキュメントを読んだことと思います。
重要な違いの1つは、要素ごとの演算子は配列を操作できるのに対し、短絡演算子はスカラー論理オペランドにのみ適用されることです。
しかし、おそらく重要な違いは短絡の問題です。短絡演算子の場合、式は左から右に評価され、最終結果が確実に決定されるとすぐに、残りの項は評価されません。
たとえば、
x = a && b
a
に評価される場合、何に評価されるかに関係なく、に評価されるfalse
ことがわかります。したがって、を評価する必要はありません。a && b
false
b
b
ここで、この式について考えてみましょう。
NeedToMakeExpensiveFunctionCall && ExpensiveFunctionCall
ExpensiveFunctionCall
評価には長い時間がかかると思います。への呼び出しをスキップできる他の安価なテストを実行できる場合は、ExpensiveFunctionCall
ExpensiveFunctionCallの呼び出しを回避できます。
NeedToMakeExpensiveFunctionCall
したがって、それがに評価されると仮定しfalse
ます。その場合、短絡演算子を使用しているため、ExpensiveFunctionCall
呼び出されません。
対照的に、要素単位の演算子を使用して次のような関数を記述した場合:
NeedToMakeExpensiveFunctionCall & ExpensiveFunctionCall
そうすれば、への呼び出しExpensiveFunctionCall
がスキップされることはありません。
実際、MATLABのドキュメントには、この点を非常によく説明する優れた例が含まれています。
x = (b ~= 0) && (a/b > 18.5)
この場合、がゼロのa/b
場合は実行できません。b
したがって、のテストb ~= 0
。短絡演算子を使用すると、ゼロのa/b
場合の計算を回避b
できるため、発生する実行時エラーを回避できます。明らかに、要素ごとの論理演算子は実行時エラーを回避できません。
短絡評価の詳細については、このテーマに関するWikipediaの記事を参照してください。
論理演算子
MATLABは、3種類の論理積operators
とfunctions
次のものを提供します。
|
要素ごとです—論理配列の対応する要素を操作します。
例: ベクトル入力A
とB
A = [0 1 1 0 1]; B = [1 1 0 0 1];
A | B = 11101
||
短絡です—スカラーの論理式を操作します例:
||
:入力のいずれかまたは両方がtrueと評価された場合は論理1(true)を返し、そうでない場合は論理0(false)を返します。オペランド:スカラー値を含む論理式。
A
||B
(Bは、Aがfalseの場合にのみ評価されます)A = 1;
B = 0;
C =(A || (B = 1));
B
0
この式の後にありますC is 1
。もう1つは、ビット単位です—整数値または配列の対応するビットを操作します。
参照リンク
||
スカラー入力に使用されます
|
if/whileステートメントで配列入力を受け取ります
ソースから:-
常に&&と||を使用してください 短絡が必要な場合のオペレーター。短絡に要素ごとの演算子(&および|)を使用すると、予期しない結果が生じる可能性があります。
|
論理演算子OR
として表します。短絡ORと呼ばれる論理演算子でもあります||
短絡演算子の最も重要な利点は、特定の条件が満たされた場合にのみ、それらを使用して式を評価できることです。たとえば、関数ファイルが現在のMATLABパスにある場合にのみ関数を実行したいとします。短絡により、ファイルmyfun.mが見つからない場合に、次のコードでエラーが生成されなくなります。
comp = (exist('myfun.m') == 2) && (myfun(x) >= y)
同様に、このステートメントはゼロ除算の試みを回避します。
x = (b ~= 0) && (a/b > 18.5)
andステートメントの&&
and ||
演算子を 使用して 、それらの短絡動作を利用することもできます 。if
while
if (nargin >= 3) && (ischar(varargin{3}))
短絡||
とは、パラメータが必然的に式で評価される場合にのみ評価されることを意味します。この例では、を評価するexpr1 || expr2
場合、第2オペランドを評価する必要はありません。結果は、常に。になります。短絡演算子の長いチェーンがあり、最初にtrueと評価された場合、他の演算子は評価されません。expr1
TRUE
TRUE
A || B || C || D
要素ごとの論理|
をに置き換えるA | B | C | D
と、前のオペランドに関係なく、すべての要素が評価されます。