web-dev-qa-db-ja.com

&&および||論理的ではなく条件付き演算子ですか?

&および|は論理演算子であり、その&&および||は条件付き演算子です。

&&||および!論理演算子なので、私は間違っていますか?

62
John V

&および|は論理演算子であり、&&および||は条件演算子であると述べているMSDN C#のドキュメントに少し混乱しています。 &&||および!論理演算子を呼び出し続けているので、間違っていますか?

番号;あなたは正しいです。

MSDNドキュメントには、多くの小さな、ほとんど重要でない命名エラーがあります。私はできる限り多くのものを取り出しようとしましたが、それが重大な間違いや誤解を招くものではない場合、それは常に賢明な時間の使い方ではありません。 C#機能の名前に関する明確な説明が必要な場合は、仕様に進んでください。

そのため、関連する権限はC#仕様であり、セクション7.11に記載されています。

&^、および|演算子は、論理演算子と呼ばれます。

次に、組み込みの論理演算子を整数、列挙、ブール、およびnull許容ブールの論理演算子にさらに分解します。ユーザー定義の論理演算子もあります。詳細については、仕様を参照してください。

セクション7.12では、

&&および||演算子は、条件付き論理演算子と呼ばれます。これらは「短絡」論理演算子とも呼ばれます。

したがって、それらはすべてlogical演算子です。それらの一部は条件付き論理演算子です。

条件付き論理演算子を条件付きにするものは何ですか?これは通常条件ステートメントif)または条件式? :)。本当の理由は、仕様によって与えられます:

&&および||演算子は、&および|演算子の条件付きバージョンです。操作x && yは、操作x & yに対応しますが、 yは、xがfalseでない場合にのみ評価されます。操作x || yは、操作x | yに対応します。ただし、yは、xがtrueでない場合にのみ評価されます。

右側のオペランドは左側のオペランドの値に応じて条件付きで評価されるため、条件付き論理演算子はこのように名前が付けられます。

これは、条件付き論理演算子条件式x && yx ? y : falseを書くためのより快適な方法であり、x || yx ? true : yを書き込むためのより快適な方法です。 条件付き論理式は、実際には条件式です。

条件付き論理演算子のユーザー定義形式もあり、少し注意が必要です。詳細については、仕様を参照してください。

この主題があなたに興味があるなら、さらに読んでください:

119
Eric Lippert

C#では、これらはall論理演算子です

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++はそれらを Arithmetic Operators

27
Robert Harvey