C # — как получить обратно значения из флага ORed

предположим, я имею дело с 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 перевернул эту операцию ИЛИ, чтобы узнать, какие флаги он содержит? Другими словами, предположить, что я получил это значение «0C0000000h», и мне нужно знать, какие обращения к нему содержатся, какие операции мне следует делать с этим номером?

моя точка зрения в том, что если у меня есть около 100 флагов, и я ORed / ANDed их, то я в конечном итоге с некоторым сложным числом, как я могу получить флаги, использованные для составления этого числа?

1

Решение

Двоичная операция И может использоваться для проверки отдельных битов (или флагов).

Например

bool b = (value & GENERIC_READ) != 0;

оценивается как истина, если GENERIC_READ был ORed в значение ранее, независимо от того, какие другие флаги были объединены.

Если это не объясняет это достаточно хорошо, то, возможно, http://en.wikipedia.org/wiki/Bitwise_operation#AND помог бы.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector