C++ C++/WinAPI-从DWORD中删除标志(按位运算符?)

C++ C++/WinAPI-从DWORD中删除标志(按位运算符?),c++,winapi,bit-manipulation,flags,dword,C++,Winapi,Bit Manipulation,Flags,Dword,现在我知道了如何使用按位&AND运算符检查DWORD(特别是Windows样式)中是否有特定标志。我将如何做到这一点: if (dwMyFlags & dwSomeFlag) { // dwMyFlags contains dwSomeFlag // ->> How do I remove dwSomeFlag from dwMyFlags? } 我知道减法是行不通的,有没有一些运算符可以从DWORD中删除标志?并且使用不属于该标志的位: dwMyFlags

现在我知道了如何使用按位
&
AND运算符检查DWORD(特别是Windows样式)中是否有特定标志。我将如何做到这一点:

if (dwMyFlags & dwSomeFlag) {
    // dwMyFlags contains dwSomeFlag
    // ->> How do I remove dwSomeFlag from dwMyFlags?
}

我知道减法是行不通的,有没有一些运算符可以从DWORD中删除标志?

并且使用不属于该标志的位:

dwMyFlags &= ~dwSomeFlag;
这也可扩展为删除多个标志:

dwMyFlags &= ~(dwSomeFlag | dwSomeOtherFlag);

此外,匈牙利符号已经不再使用了。

并且使用了不属于该标志的位:

dwMyFlags &= ~dwSomeFlag;
这也可扩展为删除多个标志:

dwMyFlags &= ~(dwSomeFlag | dwSomeOtherFlag);

此外,匈牙利符号已不再使用。

使用所需标志的倒数按位执行
&

dwMyFlags = dwMyFlags & ~dwSomeFlag;
您可以使用
&=
将其缩写为:

dwMyFlags &= ~dwSomeFlag;

使用所需标志的反方向执行位
&

dwMyFlags = dwMyFlags & ~dwSomeFlag;
您可以使用
&=
将其缩写为:

dwMyFlags &= ~dwSomeFlag;

如果您知道标志已设置,则可以使用“独占”或取消设置:

dwMyFlags ^= dwSomeFlag;
如果不确定标志的状态,则需要使用按位&,而按位不使用~

dwMyFlags &= ~dwSomeFlag;

如果您知道标志已设置,则可以使用“独占”或取消设置:

dwMyFlags ^= dwSomeFlag;
如果不确定标志的状态,则需要使用按位&,而按位不使用~

dwMyFlags &= ~dwSomeFlag;

+1例如,删除多个标志。而且,我知道,我从来没有使用过它,我只是想为了这个例子而使用它。我通常给变量起一个简短但描述性的名字。匈牙利符号使代码看起来很难看。@BrandonMiller,如果你没有一个方法在一秒钟内检查它是什么类型的话,它会更有用。是的,有了VisualAssist X,我可以将鼠标悬停在一个变量上查看它的类型。+1例如删除多个标志。而且,我知道,我从来没有使用过它,我只是想为了这个例子而使用它。我通常给变量起一个简短但描述性的名字。匈牙利符号让代码看起来很难看。@BrandonMiller,如果你没有一种方法可以在一秒钟内检查它是什么类型的话,它会更有用。是的,有了视觉辅助X,我可以在一个变量上悬停以查看它的类型。+1表示反转,并区分缩写和完整形式。+1表示反转,区分缩写和完整形式。+1太好了,第二种方法可以避免我再写一条if语句。谢谢。+1太好了,第二种方法省去了我写另一条if语句的麻烦。谢谢