&
MATLABのと&&
論理演算子の違いは何ですか?
7 に答える
単一のアンパサンド&は論理AND演算子です。ダブルアンパサンド&&も、短絡動作を採用する論理AND演算子です。短絡とは、結果が第1オペランド(左側)によって完全に決定されない場合にのみ、第2オペランド(右側)が評価されることを意味します。
A&B(AとBが評価されます)
A && B(BはAが真の場合にのみ評価されます)
&&
スカラー入力を||
取り、常に短絡します。 |
配列入力を&
受け取り、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など)で使用する引数を作成する際の経験則として、常に&&/||を使用することをお勧めします。そうしない非常に正当な理由がない限り、フォーム。2つの理由があります...
- 他の人が述べているように、&&/||の短絡動作 ほとんどのCのような言語に似ています。その類似性/親しみやすさは、一般的にそれを支持するポイントと見なされます。
- &&または||を使用する フォームを使用すると、ベクトル引数の意図を決定するための完全なコードを記述する必要があります。a = [1 001]およびb=[0 1 0 1]の場合、a&bは真ですか?それとも偽ですか?MATLABの&のルールを思い出せません。ほとんどの人はできません。一方、&&または||を使用する場合は、条件を解決するためにコードを「完全に」記述する必要があります。
&と|のベクトルのMATLABの解決に依存するのではなく、これを行うと、コードは少し冗長になりますが、はるかに安全で保守が容易になります。