1

&我现在知道如何使用按位AND 运算符检查 DWORD(特别是 Windows 样式)中是否存在某个标志。我该怎么做:

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

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

4

3 回答 3

9

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

dwMyFlags ^= dwSomeFlag;

如果你不确定标志的状态,你需要使用按位&,而不是按位~

dwMyFlags &= ~dwSomeFlag;
于 2012-10-17T21:18:38.790 回答
7

用你想要的标志&倒数按位:

dwMyFlags = dwMyFlags & ~dwSomeFlag;

您可以使用以下方式缩写&=

dwMyFlags &= ~dwSomeFlag;
于 2012-10-17T21:12:01.543 回答
5

与不属于该标志的位:

dwMyFlags &= ~dwSomeFlag;

这也可以扩展到删除多个标志:

dwMyFlags &= ~(dwSomeFlag | dwSomeOtherFlag);

此外,匈牙利符号已经过时了。

于 2012-10-17T21:11:57.783 回答