MATLABの&
と&&
論理演算子の違いは何ですか?
単一のアンパサンド&は論理AND演算子です。ダブルアンパサンド&&は、短絡動作を採用する論理AND演算子です。短絡とは、結果が第1オペランド(左側)によって完全に決定されない場合にのみ、第2オペランド(右側)が評価されることを意味します。
A&B(AとBが評価されます)
A && B(BはAがtrueの場合にのみ評価されます)
&&
および||
は、スカラー入力を受け取り、常に短絡します。 |
および&
は、配列入力を受け取り、if/whileステートメントでのみ短絡します。割り当ての場合、後者は短絡しません。
詳細については、 これらのドキュメントページ を参照してください。
両方とも論理AND演算です。ただし、&&は「短絡」演算子です。 MATLABドキュメントから:
これらは、結果が第1オペランドによって完全に決定されない場合にのみ第2オペランドを評価するという点で、短絡演算子です。
詳しくは こちら をご覧ください。
他の言語と同様に、&
は論理的なビット演算子であり、&&
は論理演算です。
たとえば(構文をご容赦ください)。
もし..
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)
それが明確であることを願っています。
条件文(IF、WHILEなど)で使用する引数を作成する際の目安は、always use &&/||です。しない理由は特にありません。 2つの理由があります...
これを行うと、MATLABの&および|のベクトルの解像度に依存するのではなく、コードは少し冗長になりますが、LOTはより安全で維持しやすくなります。