如何从红旗中检索返回值

时间:2014-06-20 23:13:34

标签: c# c++ c bitflags

假设我正在处理CreateFileA

我有

Public Const GENERIC_ALL As Int32 = &H10000000
Public Const GENERIC_READ As Int32 = &H80000000
Public Const GENERIC_WRITE As Int32 = &H40000000
Public Const GENERIC_EXECUTE As Int32 = &H20000000

因此,这意味着如果我需要读写,我会做

GENERIC_READ | GENERIC_WRITE = 0C0000000h

API如何反转OR操作以了解它包含哪些标志?换句话说,假设我得到了值“0C0000000h”,我需要知道它包含哪些访问,我应该对这个数字做什么操作? / p>

我的观点是,如果我有大约100个标志并且我对它们进行OR运算和结果,那么最终会出现一些复杂的数字,我怎样才能检索用于编写该数字的标志?

1 个答案:

答案 0 :(得分:1)

二进制AND运算可用于测试各个位(即标志)。

例如

bool b = (value & GENERIC_READ) != 0;
如果GENERIC_READ与之前的值进行OR运算,则

的计算结果为true,无论其他标志组合在一起。

如果这不能很好地解释,那么http://en.wikipedia.org/wiki/Bitwise_operation#AND可能会有所帮助。