1

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」という値を取得したと仮定し、それに含まれるアクセスを知る必要があります。この番号に対してどのような操作を行う必要がありますか?

私の要点は、約 100 個のフラグがあり、それらを ORed/ANDed すると、複雑な数値になってしまうということです。その数値を構成するために使用されたフラグを取得するにはどうすればよいでしょうか?

4

1 に答える 1

1

バイナリ AND 演算を使用して、個々のビット (別名フラグ) をテストできます。

例えば

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

GENERIC_READ が以前に値に OR された場合、他のどのフラグが組み合わされているかに関係なく、true と評価されます。

それでも十分に説明できない場合は、おそらくhttp://en.wikipedia.org/wiki/Bitwise_operation#ANDが役立ちます。

于 2014-06-20T23:23:54.957 に答える