8

2 つのメソッド呼び出しではなく 2 つの変数を評価している場合、天候は関係ありません。「&&」または「&」を使用します。

//some logic that sets bool values

boolean X = true;
boolean Y = true;

if (X & Y){
   // perform some operation
}

if (X && Y){
   // perform some operation
}

さらに、C# 3.0 / .NET 3.5 で使用している本では && 演算子のみを参照していますが、& 演算子は廃止されますか?

4

4 に答える 4

9

真/偽の論理テストを実行する場合は、常に&&を使用してください。単一の&はビット単位の'および'を実行します。場合によってはロジックテストのように機能しますが、すべてのロジックケースで機能することが保証されているわけではありません。シングル&の最も一般的な使用法は、ビットマスクを適用する場合です。

例(&&):

true && true == true

例 (&):

00101001 & 00100001 = 00100001
于 2008-11-13T04:29:59.863 に答える
7

単一の&(And)を使用すると、式の2番目の部分が評価されます。2番目の部分が最初の部分が真であることに依存している場合、これは悪い可能性があります。最初の部分がfalseの場合、2番目の部分は評価されないため、通常は常に&&を使用します。

論理的には、他の人が言っているように、単一の&はビット単位の演算を実行します。これは、ブール値の比較/評価に引き続き有効です。実際、単一の&(または|)(またはブール評価)を使用する必要があるのは、2番目の評価を常に実行する必要がある場合(関数呼び出し/修飾子の場合)のみです。これは悪い習慣であり、おそらく本がそれについて言及していない理由です。

シングル&は、フラグ列挙型とビットマスクで役立ちます。

以下は、objisnullの例外をスローします。

bool b = obj != null & obj.IsActive

しかし、これは機能します:

bool b = obj != null && obj.IsActive

これは悪いです:

bool b = obj.IsActive && obj.SetActive(false);
bool b = obj.IsActive & obj.SetActive(false);

&演算子はここにあります。

于 2008-11-13T04:35:02.193 に答える
3

観察されたように、&はビットごとの AND 演算子です。生のバイナリ演算は、時間の経過とともにますます一般的ではないように思われ、ビット演算を実際に理解していない開発者が増えています。これは時々苦痛になることがあります。

しかし、特にデータをフラグとして見るものは何でも、そのようなもので最もよく解決される多くのタスクがあります。演算子は 100% 必要であり、&どこにも行きません。ブール型の短絡&&演算子ほど頻繁には使用されません。

例えば:

[Flags]
enum SomeEnum { // formatted for space...
    None = 0, Foo = 1, Bar = 2 // 4, 8, 16, 32, ...
}
static void Main() {
    SomeEnum value = GetFlags();
    bool hasFoo = (value & SomeEnum.Foo) != 0;
}
static SomeEnum GetFlags() { ... }
于 2008-11-13T05:16:51.937 に答える
1

&はビット演算子であり、&&はAND演算子です。2つの完全に異なる操作。

int a = 1;
int b = 2;
assert (a & b == 0) 
assert (a && b == true) 

編集:おっと...この例はC#では機能しません。C++である必要があります。うまくいけば、それは2つの演算子の意図と違いを示しています。

于 2008-11-13T04:30:04.420 に答える