测试Flags Enum中是否只设置了一个位

Lia*_*iam -5 c# bit-manipulation enum-flags

所以我有一个标志枚举

public Enum test
{
   test1 = 1,
   test2 = 2,
   test3 = 4,
   etc.
}
Run Code Online (Sandbox Code Playgroud)

如何测试那一位,只设置一位?

我以前100%完成了这个,但是我的思绪不是这样的!

spe*_*der 13

要检查数字中是否只设置了一个位,该数字必须(根据定义)为2的幂.因此,您可以使用以下内容进行测试:

int intVal = ((int)myEnumFlags);
bool singleBitIsSet = intVal != 0 && (intVal & (intVal-1)) == 0;
Run Code Online (Sandbox Code Playgroud)

这是我最喜欢的参考资料:

http://aggregate.org/MAGIC

  • 请注意,当`intVal == 0`时,这将不起作用.`0`没有位设置但是'0&-1 == 0` (4认同)