enums — проверяет множественные логические условия, используя dword в переполнении стека

Я действительно новичок в использовании 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 значение.

2

Решение

Проблема: 1 = бит 0, 0 неверен.
Для проверки каждое «условие» должно представлять отдельный бит (бит 0 = 1, бит 1 = 2 и т. Д.)

Итак — простое изменение: foo1 = 0x01; foo2 = 0x02; должен это исправить.
ПРИМЕЧАНИЕ: любые дополнительные проверки должны представлять битовые значения, НЕ порядковые.
Другими словами, foo3 = 0x04; (не 0x03;)

1

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

Вы можете сделать это проще, создав следующие константы со сдвигами:

enum foo
{
foo1 = 1 << 0;
foo2 = 1 << 1;
foo3 = 1 << 2;
//....
}

Таким образом, вы можете быть уверены, что для каждой маски установлен один бит.

0

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