web-dev-qa-db-ja.com

MATLABの&と&&の違いは何ですか?

MATLABの&&&論理演算子の違いは何ですか?

87
Fantomas

単一のアンパサンド&は論理AND演算子です。ダブルアンパサンド&&は、短絡動作を採用する論理AND演算子です。短絡とは、結果が第1オペランド(左側)によって完全に決定されない場合にのみ、第2オペランド(右側)が評価されることを意味します。

A&B(AとBが評価されます)

A && B(BはAがtrueの場合にのみ評価されます)

89
Fraser

&&および||は、スカラー入力を受け取り、常に短絡します。 |および&は、配列入力を受け取り、if/whileステートメントでのみ短絡します。割り当ての場合、後者は短絡しません。

詳細については、 これらのドキュメントページ を参照してください。

32
Loren

他の人がすでに述べたように、&論理AND演算子 であり、&&短絡AND演算子 です。これらは、オペランドの評価方法と、配列またはスカラーで動作するかどうかが異なります:

  • &(AND演算子)および|(OR演算子)は、要素単位でarraysを操作できます。
  • &&および||は、結果が第1オペランドによって完全に決定されない場合にのみ第2オペランドが評価される短絡バージョンです。これらは、配列ではなく、スカラーでのみ操作できます。
16
gnovice

両方とも論理AND演算です。ただし、&&は「短絡」演算子です。 MATLABドキュメントから:

これらは、結果が第1オペランドによって完全に決定されない場合にのみ第2オペランドを評価するという点で、短絡演算子です。

詳しくは こちら をご覧ください。

8
Mark

他の言語と同様に、&は論理的なビット演算子であり、&&は論理演算です。

たとえば(構文をご容赦ください)。

もし..

A = [True True False True]
B = False
A & B = [False False False False]

..または..

B = True
A & B = [True True False True]

&&の場合、右のオペランドは、左のオペランドがtrueの場合にのみ計算され、結果は単一のブール値です。

x = (b ~= 0) && (a/b > 18.5)

それが明確であることを願っています。

5
Erik Kerber

&&および|| 短絡 スカラーで動作する演算子です。 &および|配列を操作し、 短絡を使用ifまたはwhileループ式のコンテキストでのみ使用します。

4
Dima

条件文(IF、WHILEなど)で使用する引数を作成する際の目安は、always use &&/||です。しない理由は特にありません。 2つの理由があります...

  1. 他の人が言及したように、&&/||の短絡動作ほとんどのC言語に似ています。その類似性/親しみやすさは、一般的には有利な点と見なされます。
  2. &&または||を使用するforms forcesベクトル引数の意図を決定するための完全なコードを記述します。 a = [1 0 0 1]およびb = [0 1 0 1]の場合、a&bは真か偽ですか? MATLABの&のルールを思い出せませんか?ほとんどの人はできません。一方、&&または||を使用すると、条件を解決するために「完全に」コードを記述する必要があります。

これを行うと、MATLABの&および|のベクトルの解像度に依存するのではなく、コードは少し冗長になりますが、LOTはより安全で維持しやすくなります。

2
Bob Gilmore