&& (AndAlso)は重要ではありません。 (そして)

StackOverflow https://stackoverflow.com/questions/286250

  •  08-07-2019
  •  | 
  •  

質問

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に使用している本では、&&演算子は&ですオペレーターは去りますか?

役に立ちましたか?

解決

観察されているように、& はビット単位の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() { ... }

他のヒント

常に&&を使用しますtrue / false論理テストを実行している場合。単一の&ビット単位の「and」を実行します。場合によってはロジックテストのように動作しますが、すべてのロジックケースで動作することが保証されているわけではありません。単一の&の最も一般的な使用ビットマスクを適用するときです。

例(&&):

true && true == true

例(&):

00101001 & 00100001 = 00100001

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

論理的には単一の&他の人が言ったようにビットごとの操作を行いますが、これはブール比較/評価に有効です。本当に唯一の& (または|)を使用する(またはブール評価)のは、2番目の評価を常に実行する場合(関数呼び出し/修飾子の場合)です。これは悪い習慣であり、おそらくこの本で言及されていない理由でしょう。

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

次の場合、obj is nullの例外がスローされます。

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);

&オペレーターはここにいます。

&は&wise;&& AND演算子です。 2つの完全に異なる操作。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top