#c# #c #c #bitflags
#c# #c #c #битфлаги
Вопрос:
предположим, что я имею дело с CreateFileA
у меня есть
Public Const GENERIC_ALL As Int32 = amp;H10000000
Public Const GENERIC_READ As Int32 = amp;H80000000
Public Const GENERIC_WRITE As Int32 = amp;H40000000
Public Const GENERIC_EXECUTE As Int32 = amp;H20000000
таким образом, это означает, что если мне нужно читать и писать, я бы сделал
GENERIC_READ | GENERIC_WRITE = 0C0000000h
как бы API изменил эту операцию OR, чтобы узнать, какие флаги она содержит?, другими словами, предположим, что я получил это значение «0C0000000h», и мне нужно знать, какие обращения к нему содержатся, какие операции я должен выполнить с этим номером?
я хочу сказать, что если у меня около 100 флагов, и я их ORed / ANDed, то в итоге я получу какое-то сложное число, как я могу получить флаги, используемые для составления этого числа?
Комментарии:
1. Как правило, вы бы замаскировали нужный флаг.
2.
GENERIC_READ | GENERIC_WRITE = 0C0000000h
Что вы имеете в виду ?!? Это не будет работать ни на одном из языков, которые вы отметили ?!? Вы перепутали сGENERIC_READ | GENERIC_WRITE == 0C0000000h
?3. «как бы API изменил эту операцию OR, чтобы узнать, какие флаги она содержит?» Логические и, скорее всего, операции:
(flags amp; GENERIC_WRITE) > 0
4. Это похоже на Visual Basic, а не на C / C или C#
Ответ №1:
Двоичный файл И операция может использоваться для проверки отдельных битов (иначе флагов).
Например
bool b = (value amp; GENERIC_READ) != 0;
вычисляется как true, если GENERIC_READ был включен в значение ранее, независимо от того, какие другие флаги были объединены.
Если это недостаточно хорошо объясняет это, то, возможно http://en.wikipedia.org/wiki/Bitwise_operation#AND это помогло бы.