Теперь я знаю, как проверить наличие определенного флага в DWORD (в частности, в стиле Windows) с помощью побитового &
И оператор. Как бы я это сделал:
if (dwMyFlags & dwSomeFlag) {
// dwMyFlags contains dwSomeFlag
// ->> How do I remove dwSomeFlag from dwMyFlags?
}
Я знаю, что вычитание не будет работать, есть ли оператор, который может удалить флаги из DWORD?
Если вы знаете, что флаг установлен, вы можете использовать исключение или сброс:
dwMyFlags ^= dwSomeFlag;
Если вы не уверены в состоянии флага, вам нужно использовать побитовое &и поразрядно не ~
dwMyFlags &= ~dwSomeFlag;
Сделать побитовый &
с обратный флага, который вы хотите:
dwMyFlags = dwMyFlags & ~dwSomeFlag;
Вы можете сократить это используя &=
:
dwMyFlags &= ~dwSomeFlag;
И с битами, которые не являются частью этого флага:
dwMyFlags &= ~dwSomeFlag;
Это также масштабируется для удаления нескольких флагов:
dwMyFlags &= ~(dwSomeFlag | dwSomeOtherFlag);
Кроме того, венгерская нотация пережила его использование.