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语句的麻烦。谢谢