Enum Flag上的按位运算

时间:2017-05-29 10:42:00

标签: c# bitwise-operators enum-flags

假设您有以下Enumeration,其中包含标志。

if let index = cells.index(where: { if case .to = $0 { return true } else { return false } }) {
    cells[index] = .to(recipient)
}

你实例化一个新旧的:

[Flags]
public enum MyFlag
{
    None = 0,
    Foo = 1 << 0,
    Bar = 1 << 1,
    Baz = 1 << 2,
    Quuz = 1 << 3
}

我的第一个问题:如何对新旧进行逐位运算,得到XOR标志?

var newF = MyFlag.Foo | MyFlaq.Quuz; // 1001
var oldF = MyFlag.Foo | MyFlag.Baz;  // 0101

然后另一个问题:如何使用该XOR标志来计算添加和删除的标志?

var xor = ?????  // -> should be    1100

在一张纸上手动执行此操作非常简单。

Bitwise operation on paper.

这种权利应该有某种按位操作吗?请告诉我答案,我会将其添加到我的技能组合中! : - )

答案是:

MyFlag added = ????? // Do something with new and xor -> should result in : 1000
MyFlag removed = ????? // Do same thing with old and xor -> should result in: 0100

1 个答案:

答案 0 :(得分:1)

尝试From: Friendly Name;请注意,^是C#中的关键字,这就是为什么当它被用作名称时应该作为new的原因:

@new

测试

  var @new = MyFlag.Foo | MyFlag.Quuz; // 1001
  var old = MyFlag.Foo | MyFlag.Baz;   // 0101

  var xor = @new ^ old; // <- xor

最后,您似乎正在寻找按位 // 1100 Console.Write(Convert.ToString((int)xor, 2)); 来获取&added值:

removed