15

ここで、C# の && 演算子と & 演算子の違いに関するいくつかの質問を見ました。たとえば、プロジェクトで次のコードを垣間見ただけです

bMyBoolean = Convert.ToBoolean(nMyInt & 1);
bMyBoolean = Convert.ToBoolean(nMyInt & 2);

結果が 0 になるのはいつで、>0 になるのはいつですか? この演算子の背後にあるロジックは何ですか? 演算子「|」の違いは何ですか?

bMyBoolean = Convert.ToBoolean(nMyInt | 1);
bMyBoolean = Convert.ToBoolean(nMyInt | 2);

&&、|| を使用できますか 演算子と同じ結果が得られますか (おそらく異なるコードで)?

4

7 に答える 7

12

&&条件付きで、ifステートメントで使用され、while

if(x>1 && y<3)

これは、x が 1 より大きく、y が 3 より小さい必要があり、両方の条件を満たす必要があることを意味します。

if(x>1 || y<3)

それらの1つを満たす

ただし、& と | それぞれビットごとの AND と OR です。元:

 1 | 0  => 1
 1 & 0  => 0
 1 & 1  => 1

これがストレート整数に適用される場合、対応するバイナリ値が計算されて適用されます

2&1
=>   10  // the binary value of 2
     &
     01  // the binary value of 1
     --
     00  // the result is zero
于 2012-09-26T10:57:25.943 に答える
8

アンパサンドは、バイナリ表現の整数に対してビットごとの AND を実行します。パイプはビットごとの OR を実行します。

これらのビット単位の操作の意味をここで参照してください: http://en.wikipedia.org/wiki/Bitwise_operation

于 2012-09-26T10:58:33.027 に答える
4

& と | ビット演算です。ビットマスクで使用する必要があります。&& と || は論理演算であるため、ブール値のみに使用できます。

ビット操作の例:

var a = 1;
var b = 2;
var c = a|b;

バイナリ形式では、これは a = 00000001、b = 00000010 c = 00000011 を意味します。

したがって、ビットマスク c を使用すると、値 1、2、または 3 が渡されます。

于 2012-09-26T10:56:03.650 に答える
2

もう1つの違いは、オペランドがbool(あなたの場合は整数)でない場合、 & 演算子はそのオペランドの論理ビット単位のANDを計算することです。

于 2012-09-26T10:58:29.187 に答える
2

& operator is BItwise AND演算子、ビットを操作します。例: 5 & 3

        0101    //5
        0011   //3
    ----------
5&3=    0001   //1

| operator is BItwise OR演算子、ビットを操作します。5|3

        0101    //5
        0011   //3
    ----------
  5|3=  0111   //7

&&演算子 is logical AND operator- itreturns true if all conditions are true

       if((3>5)&&(3>4))   //returns true
       if((6>5)&&(3>4))   //returns false

||演算子 is logical OR operator- itreturns true if one of the conditions is true

   if((3>5)||(3>4))   //returns true
   if((6>5)||(3>4))   //returns true
   if((6>5)||(5>4))   //returns false
于 2012-09-26T11:00:58.163 に答える
1

&& と & の違いは他の回答で説明されているので、これを理解していると仮定します。ここでは、指定されたケースを説明しようとしています。

最初のケース

bMyBoolean = Convert.ToBoolean(nMyInt & 1);

bMyBoolean false理由nMyInt = 0:

  00 
& 01 
= 00;

2 番目のケース:

bMyBoolean = Convert.ToBoolean(nMyInt & 2);

bMyBoolean falseいつnMyInt = 0または1なぜ

  00 
& 10 
= 00;

または:

  01 
& 10 
= 00;

ビットごとの 3 番目と 4 番目のケース | bMyBoolean は常に任意の nMyInt で true であるため、自明です。

bMyBoolean = Convert.ToBoolean(nMyInt | 1);
bMyBoolean = Convert.ToBoolean(nMyInt | 2);

&& または || を適用することはできません。この場合、これらは のみの制約であるためbool、コンパイル エラーが発生します。

于 2012-09-26T11:21:59.597 に答える
0

ここに&の興味深い点があります。& be のようにビット単位で、以下の例のようにブールに使用できます。

bool result = true;
result &= false;
Console.WriteLine("result = true & false => {0}", result );
//result = true & false => False

result = false;
result &= false;
Console.WriteLine("result = false & false => {0}", result );
//result = false & false => False


result = true;
result &= true;
Console.WriteLine("result = true & true => {0}", result );
//result = true & true => True
于 2013-05-29T16:39:26.590 に答える