C#中& =和| =运算符的用途是什么

时间:2013-06-18 04:33:21

标签: c# operators

我不确定这些运营商正在做什么:

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
*/

但是,它做了什么?

3 个答案:

答案 0 :(得分:7)

它们是&|运算符和赋值的组合。 a &= ba = a & b做同样的事情。

&|是按位以及运算符。 &是其操作数中所有位的交集,|是并集:

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

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

基本上,当您在两个数字上使用&时,所有位都设置为在两个操作数中设置,而使用|时所有位都设置为在至少一个操作数中设置。

答案 1 :(得分:2)

那些是按位运算符。 &表示逻辑AND运算符,|表示OR。对于NOT,还有~,对于XOR,还有^

在您的示例中,它只是计算两个二进制值之间的AND:1100 AND 0110 = 0100(在输出中为4)。第二个可以被视为1 AND 0 = 0。 您可以参考真值表以了解它的确切工作原理:AND operationOR operation

但是,最常见的用法之一是使用枚举。例如,假设你有一周的日子

[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

答案 2 :(得分:1)

这些是标准按位运算符AND(&)和OR(|)的快捷方式。

a &= 0x06;

相当于:

a = a & 0x06

有关AND和OR的说明,请参阅this wikipedia article