c# - 在标志上使用按位运算符

标签 c# .net bit-manipulation bit-fields

我有四面旗帜

Current = 0x1  
Past = 0x2  
Future = 0x4  
All = 0x7

假设我收到过去和 future 两个标志 (setFlags(PAST | FUTURE))。我如何判断 Past 是否在其中?同样,我怎么知道 Current 不在其中?这样我就不必测试所有可能的组合。

最佳答案

如果您希望测试掩码中的所有位都匹配:

if((value & mask) == mask) {...}

如果您希望测试掩码中的任何一位都匹配:

if((value & mask) != 0) {...}

当您测试多个事物的值时,差异最为明显。

测试排除:

if ((value & mask) == 0) { }

关于c# - 在标志上使用按位运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/530077/

相关文章:

c# - 在新 AppDomain 中加载程序集而不在父 AppDomain 中加载它

c# - 带TimeSpan的定时器和自制定时器比秒表慢

c# - 将 IQueryable<T> 对象转换为另一个对象?

javascript - 如何在 Javascript 中查找两个数字之间的位差

C# GC 不释放内存

c# - 使用 for 循环生成密码

c# - 我如何进行列表遍历?

.net - 在 Windows 10 IIS 10 中注册 .Net Framework 4.6

c - 位集隶属函数

bit-manipulation - 从移动位板生成单个移动