3

これらのオペレーターが何を達成しているかはわかりません。

byteInfo[x, y, z] |= (byte)info;

としても:

byteInfo[x, y, z] &= (byte)255 - (byte)info;

msdn から:

class AndAssignment
{
    static void Main()
    {
        int a = 0x0c;
        a &= 0x06;
        Console.WriteLine("0x{0:x8}", a);
        bool b = true;
        b &= false;
        Console.WriteLine(b);
   }
}

/*
Output:
0x00000004
False
*/

しかし、それは何をしましたか?

4

3 に答える 3

7

これらは&and|演算子と代入の組み合わせです。a &= bと同じことをしていa = a & bます。

&and|は、ビットごとのand and or演算子です。&はそのオペランドのすべてのビットの交点、|は和集合です:

  10011100101
& 00100011110
-------------
  00000000100

  10011100101
| 00100011110
-------------
  10111111111

基本的に、&2 つの数値を使用している場合、両方のオペランドで設定され| ているすべてのビットが設定され、少なくとも 1 つのオペランドで設定されているすべてのビットが設定されます。

于 2013-06-18T04:34:27.243 に答える
2

これらはビット単位の演算子です。&論理 AND 演算子と|OR を表します。~NOT^用とXOR用もあります。

あなたの例では、2つのバイナリ値の間のANDを単純に計算して1100 AND 0110 = 0100います:(出力のように4です)。2 つ目は として見ることができます1 AND 0 = 0。真理値表を参照して、それが正確にどのように機能するかを確認できます: AND 演算OR 演算

ただし、最も一般的な用途の 1 つは列挙です。たとえば、曜日があるとしましょう

[Flags]
public enum DaysOfTheWeek
{
    Sunday = 0x1,
    Monday = 0x2,
    Tuesday = 0x4,
    Wednesday = 0x8,
    Thursday = 0x16,
    Friday = 0x32,
    Saturday = 0x64
}

ビット単位の演算子を使用して、値を簡単に割り当てることができます。たとえば、週末を表したい場合は、OR 演算子を使用してバイナリ フラグを設定できます。

DaysOfTheWeek weekend = DaysOfTheWeek.Saturday | DaysOfTheWeek.Sunday;

値に正しいフラグが含まれているかどうかを確認するには、AND 演算子を使用できます。

bool isSundayAWeekend = (weekend & DaysOfTheWeek.Sunday) == DaysOfTheWeek.Sunday
于 2013-06-18T05:52:41.233 に答える
1

これらは、標準のビット演算子 AND (&) および OR (|) のショートカットです。

a &= 0x06;

次と同等です。

a = a & 0x06

AND と OR の説明については、このウィキペディアの記事を参照してください。

于 2013-06-18T04:35:56.240 に答える