ドキュメンテーション センター

  • 評価版
  • 製品アップデート

このページは前リリースの情報です。該当の英語のページはこのリリースで更新されています。このリリースの英語のドキュメンテーションを参照するには、言語設定を United States に変更してください。

論理演算子: 要素単位の & | ~

配列の要素単位の論理演算

構文

expr1 & expr2
expr1 | expr2
~expr

説明

記号 &|、および ~ は、論理配列演算子 ANDOR、および NOT です。これらの演算子は、ifwhile などの条件ステートメントで頻繁に使用され、特定のコード ブロックを実行するかどうかを決定します。論理演算子は必要に応じて、要素が 1 (true) または 0 (false) に設定された logical 配列を返します。

expr1 & expr2 は、値、配列、または expr1 式と expr2 式の間の論理 AND 演算を表します。AND 演算では、expr1true であり、expr2true の場合、これらの入力の AND 演算は true になります。いずれかの式が false の場合、結果は false になります。AND の疑似コードの例を次に示します。

IF (expr1: all required inputs were passed) AND ...
   (expr2: all inputs are valid)
THEN (result: execute the function)

expr1 | expr2 は、値、配列、または expr1 式と expr2 式の間の論理 OR 演算を表します。OR 演算では、expr1true であるか、または expr2 が true の場合、これらの入力の OR 演算は true になります。式が両方とも false の場合、結果は false になります。OR の疑似コードの例を次に示します。

IF (expr1: S is a string) OR ...
   (expr2: S is a cell array of strings)
THEN (result: parse string S)

~expr は、expr 式に適用される論理 NOT 演算を表します。NOT 演算では、exprfalse の場合、演算の結果は true になります。exprtrue の場合、結果は false になります。NOT の疑似コードの例を次に示します。

IF (expr: function returned a Success status) is NOT true
THEN (result: throw an error)

xor(A,B) 関数は、排他的 OR 演算を実行します。

配列に対する論理演算

多くの場合、AND、OR、および NOT 演算に使用する式オペランドは大きさが 1 でない次元の配列です。その場合、MATLAB® ソフトウェアでは、配列の各要素に対して論理演算を実行します。出力は、入力配列と同じサイズの配列になります。

一方のオペランドのみが配列で、もう一方がスカラーである場合、配列の各要素に対してスカラーが一致します。オペランドに複数の非スカラー配列が含まれている場合、これらの配列のサイズは等しくなければなりません。

次の表は、スカラーや配列の入力を使用する AND、OR、および NOT ステートメントの出力を示しています。この表で、S はスカラー配列であり、A は非スカラー配列であり、R は生成された配列です。

演算結果
S1 & S2R = S1 & S2
S & AR(1) = S & A(1); ...
R(2) = S & A(2); ...
A1 & A2R(1) = A1(1) & A2(1);
R(2) = A1(2) & A2(2); ...
S1 | S2R = S1 | S2
S | AR(1) = S | A(1);
R(2) = S | A(2); ...
A1 | A2R(1) = A1(1) | A2(1);
R(2) = A1(2) | A2(2); ...
~SR = ~S
~AR(1) = ~A(1);
R(2) = ~A(2), ...

複合論理ステートメント

AND 演算または OR 演算を使用して評価できる式の数は、2 つ (A & B など) に制限されません。次のようなステートメントも有効です。

expr1 & expr2 & expr3 | expr4 & expr5

丸かっこを使用して、MATLAB で複合演算が評価される順序を設定します。次の 2 つのステートメントの違いに注目してください。

(expr1 & expr2) | (expr3 & expr4)   % 2-component OR
 expr1 & (expr2 | expr3) & expr4    % 3-component AND

演算子の優先順位

論理演算子間の優先順位を次の表に示します。MATLAB では常に、& 演算子は | 演算子よりも優先順位が高くなります。MATLAB では通常、式は左から右に評価されますが、式 a|b&c は、a|(b&c) として評価されます。ステートメントに &| の両方を含める場合は、丸かっこを使用して優先順位を明示的に指定することをお勧めします。

演算子

演算

優先順位

~

NOT

最高

&

要素単位の AND

 

|

要素単位の OR

 

&&

ショートサーキットの AND

 

||

ショートサーキットの OR

最低

要素単位のショートサーキット演算子

& および | 演算子は、「ショートサーキット」として機能しません。ショートサーキット機能が必要な場合は、&& 演算子および || 演算子に関するドキュメンテーションを参照してください。

if または while 式のコンテキストで使用され、そのコンテキストに限って使用される場合、要素単位の & 演算子と | 演算子は、式の評価でショートサーキット機能を使用します。つまり、A&B および A|B において、最初のオペランド A で結果が判断できる場合は、2 番目のオペランド B は無視されます。

したがって、ステートメント 1|[]false と評価されますが、if または while 式のいずれかで使用される場合は、同じステートメントが true と評価されます。

A = 1;   B = [];
if(A|B) disp 'The statement is true',  end;
   The statement is true

一方、ショートサーキットではない逆論理式は、false と評価されます。

if(B|A) disp 'The statement is true',  end;

要素単位の演算子を使用したショートサーキットの例として、次に示すような論理式が、if 式または while 式のコンテキスト内で機能することを示します。ほとんどの状況では、AB のサイズが一致しないため、この式は無効になります。

A|B ステートメントにより次のエラーが生成されます。

A = [1 1];   B = [2 0 1];
A|B

Error using  | 
Inputs must have the same size.

ただし、if 条件のテストに使用される同じステートメントはエラーになりません。

if (A|B) disp 'The statement is true',  end;
   The statement is true

演算子の真偽表

前述の例で使用した演算子と関数の真偽表を次に示します。

入力andornotxor
ABA & BA | B~Axor(A,B)
000010
010111
100101
111100

等価な機能をもつ関数

これらの論理演算子には、次に示すように等価な機能をもつ関数があります。

論理演算

等価な機能をもつ関数

A & B

and(A,B)

A | B

or(A,B)

~A

not(A)

例 1 — OR 演算を使用した条件文

条件文で OR を使用して、S に対して関数 parseString を呼び出します。ただし、S が文字配列または文字列のセル配列である場合に限ります。

if ischar(S) | iscellstr(S)
    parseString(S)
end

例 2 — 配列と配列の AND 演算

0.3 より大きく、かつ 0.9 より小さい配列 R の要素を探します。

rng(0,'twister');
R=rand(5,7)
R =
    0.8147    0.0975    0.1576    0.1419    0.6557    0.7577    0.7060
    0.9058    0.2785    0.9706    0.4218    0.0357    0.7431    0.0318
    0.1270    0.5469    0.9572    0.9157    0.8491    0.3922    0.2769
    0.9134    0.9575    0.4854    0.7922    0.9340    0.6555    0.0462
    0.6324    0.9649    0.8003    0.9595    0.6787    0.1712    0.0971
(R > 0.3) & (R < 0.9)
ans =
     1     0     0     0     1     1     1
     0     0     0     1     0     1     0
     0     1     0     0     1     1     0
     0     0     1     1     0     1     0
     1     0     1     0     1     0     0

例 3 — 配列とスカラーの AND 演算

40 より大きいスカラー値である、配列 R の要素を検出します。

rng(0,'twister');
R = rand(3,5) * 50
R =
   40.7362   45.6688   13.9249   48.2444   47.8583
   45.2896   31.6180   27.3441    7.8807   24.2688
    6.3493    4.8770   47.8753   48.5296   40.0140
R > 40
ans =
     1     1     0     1     1
     1     0     0     0     0
     0     0     1     1     1

例 4 — NOT 演算を使用したステータスのチェック

関数の戻りステータスが成功を示さない場合は、エラーがスローされます。

[Z, status] = myfun(X, Y);
if ~(status == SUCCESS);
   error('Error in function myfun')
end

例 5 — バイナリ配列の OR 演算

この例は、u ベクトルの要素と v ベクトルの対応する要素との論理 OR 演算を示しています。

u = [0 0 1 1 0 1];
v = [0 1 1 0 0 1];
u | v

ans =
   0   1   1   1   0   1

参考

| | | | | | | |

この情報は役に立ちましたか?