Я действительно новичок в использовании DWORD
в C ++ вместо логического. Поэтому прошу прощения за мой вопрос.
у меня есть enum
:
enum foo
{
foo1 = 0x0;
foo2 = 0x1
//....
}
DWORD foo;
Я использую это enum
проверить наличие нескольких условий:
if(somethinghappenstothisvariable)
{
foo|= foo1;
}
if(somethinghappenstosecondvariable)
{
foo|=foo2;
}
Теперь в другом файле я должен проверить состояние отдельных переменных
if(foo &foo1)
{
//do something;
}
if(foo & foo2)
{
//do something;
}
Я понял что |=
добавляет значение к DWORD
если оба условия true
что приводит к foo & foo2
только чтобы быть правдой в то время как foo & foo1
не будет в качестве значения DWORD
будет 1
, Следовательно, мне было интересно, если так или иначе я могу проверить это для отдельных DWORD
значение.
Проблема: 1 = бит 0, 0 неверен.
Для проверки каждое «условие» должно представлять отдельный бит (бит 0 = 1, бит 1 = 2 и т. Д.)
Итак — простое изменение: foo1 = 0x01; foo2 = 0x02;
должен это исправить.
ПРИМЕЧАНИЕ: любые дополнительные проверки должны представлять битовые значения, НЕ порядковые.
Другими словами, foo3 = 0x04;
(не 0x03;
)
Вы можете сделать это проще, создав следующие константы со сдвигами:
enum foo
{
foo1 = 1 << 0;
foo2 = 1 << 1;
foo3 = 1 << 2;
//....
}
Таким образом, вы можете быть уверены, что для каждой маски установлен один бит.