按位减法

时间:2011-09-23 08:44:22

标签: c# bit-manipulation bitmask

鉴于枚举:

[Flags]
enum foo
{
a = 1,
b = 2,
c = 4
}

然后

foo example = a | b;

如果我不知道foo是否包含c,我以前写过以下内容

if (example & foo.c == foo.c)
    example  = example ^ foo.c;

有没有办法在不检查foo.cexample的存在的情况下执行此操作?

就添加内容而言,我可以执行 OR ,如果example中已经存在枚举值,则无关紧要。

2 个答案:

答案 0 :(得分:22)

我想你想要:

example &= ~foo.c;

换句话说,对每个位执行一个按位“AND”掩码,除了 c的那个。

编辑:我应该在某个时候向Unconstrained Melody添加“除外”,所以你可以这样写:

example = example.Except(foo.c);

让我知道你是否对此感兴趣,我会看到周末我能做些什么......

答案 1 :(得分:8)

它与foo.c的补充:

example = example & ~foo.c