我有一个像这样的枚举:
public enum Blah { RED = 2, BLUE = 4, GREEN = 8, YELLOW = 16 } Blah colors = Blah.RED | Blah.BLUE | Blah.YELLOW;
如何从可变颜色中去除蓝色?
您需要&使用~“蓝色”的(补码)。
&
~
补码运算符基本上反转或“翻转”给定数据类型的所有位。因此,如果您将AND运算符 ( &) 与某个值(我们称该值“X”)和一个或多个设置位的补码(我们称这些位Q及其补码~Q)一起使用,则该语句将X & ~Q清除在Q从X并返回结果。
AND
Q
~Q
X & ~Q
X
因此,要删除或清除这些BLUE位,请使用以下语句:
BLUE
colorsWithoutBlue = colors & ~Blah.BLUE colors &= ~Blah.BLUE // This one removes the bit from 'colors' itself
您还可以指定多个位来清除,如下所示:
colorsWithoutBlueOrRed = colors & ~(Blah.BLUE | Blah.RED) colors &= ~(Blah.BLUE | Blah.RED) // This one removes both bits from 'colors' itself
或交替…
colorsWithoutBlueOrRed = colors & ~Blah.BLUE & ~Blah.RED colors &= ~Blah.BLUE & ~Blah.RED // This one removes both bits from 'colors' itself
所以总结一下:
X | Q
~X