回答:
私は、と述べているMSDNのC#のドキュメントで少し混乱しています
&
し、|
論理演算子とそのある&&
と||
の条件付き演算子です。&&
、||
および!
論理演算子を呼び出し続けているので、間違っていますか?
番号; あなたは正しいです。
MSDNドキュメントには、多くの重要でない重要な命名法エラーが多数あります。できるだけ多くの人を探し出そうとしましたが、それがひどく間違っていて誤解を招かない場合は、必ずしも時間を賢く使うとは限りません。C#機能の名前に関する明確な説明が必要な場合は、仕様に進んでください。
したがって、関連する権限はC#仕様であり、セクション7.11に記載されています。
&
、^
、および|
演算子は、論理演算子と呼ばれます。
次に、組み込みの論理演算子をさらに整数、列挙、ブールおよびヌル可能ブール論理演算子に分解します。ユーザー定義の論理演算子もあります。詳細については、仕様を参照してください。
セクション7.12では、
演算子は、条件付きの論理演算子と呼ばれています。これらは、「短絡」論理演算子とも呼ばれます。
&&
||
したがって、それらはすべて論理演算子です。それらのいくつかは条件付き論理演算子です。
条件付き論理演算子を条件付きにするものは何ですか?条件付きステートメント(if
)または条件式(? :
)で一般的に使用されるためだと推測するかもしれません。本当の理由は仕様によって与えられます:
&&
そして||
オペレータは、条件付きのバージョンである&
と|
演算子:操作は、x && y
操作に対応するx & y
こと以外は、y
場合にのみ評価されるx
偽ではありません。操作は、trueでない場合にのみ評価されることを除いて、operationにx || y
対応します。x | y
y
x
したがって、条件付き論理演算子は、右側のオペランドが左側のオペランドの値に応じて条件付きで評価されるため、名前が付けられます。
条件付き論理演算子は条件式の単なる「構文糖」であることに注意することで、これをより鮮明に見ることができます。 x && y
は単に書くより楽しい方法x ? y : false
であり、x || y
単に書くより楽しい方法x ? true : y
です。 条件付き論理式は、実際には条件式です。
条件付き論理演算子のユーザー定義形式もあり、少し注意が必要です。詳細については、仕様を参照してください。
このテーマに興味がある場合は、さらに読みます:
C#では、これらは すべて 論理演算子です。
int x = 0xABCD & 0xFF // x == 0xCD
&&
そして、それらは短絡的であるため、||
「条件付き論理演算子」と呼ばれます。
bool someOtherCondition = true;
if (x == 0xEF && someOtherCondition) // someOtherCondition is not evaluated,
// because x == 0xEF is false
この用語は言語ごとに異なることに注意してください。CおよびC ++では &&
、||
単なる論理演算子です。Javaでは、&
および|
はBitwise Operatorsと呼ばれますが、CおよびC ++はそれらを算術演算子として分類します。
ポイントは&
and |
がビット単位の演算子であるということです。つまり、ビット文字列値に適用され、ビット文字列値が生成されます。そして、ビットワイズはプログラマーの間で非常によく使われる用語です。
たとえば0xff & 0x00 == 0x00
、while 0xff | 0x00 == 0xff
。
そして&&
and ||
は条件に適用され、条件の通常の値を生成します。すなわちtrue
およびfalse
。
たとえばtrue && false == false
、while true || false == true
。
したがって&&
、プログラマーの間では通常の用語ではありませんが、条件演算子||
と呼ばれる可能性があります。
もちろん、すべてのC、C ++、Java、およびC#プログラマーはそれをすべて知っています。しかし、「条件演算子」は私たちプログラマーが頻繁に使用する用語ではないため、誤解が生じていると思います。
|
と交換可能であると想定しないことが重要です||
。