سؤال

I now know how to check if there is a certain flag in a DWORD (Specifically a Windows style) by using the bitwise & AND operator. How would I do this:

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

I know subtracting it wouldn't work, is there some operator that can remove flags from a DWORD?

هل كانت مفيدة؟

المحلول

If you know the flag is set you can use exclusive or to unset:

dwMyFlags ^= dwSomeFlag;

If you are unsure of the state of the flag, you need to use bitwise &, and bitwise not ~

dwMyFlags &= ~dwSomeFlag;

نصائح أخرى

Do a bitwise & with the inverse of the flag that you want:

dwMyFlags = dwMyFlags & ~dwSomeFlag;

You can abbreviate this using &=:

dwMyFlags &= ~dwSomeFlag;

AND with the bits that are not part of that flag:

dwMyFlags &= ~dwSomeFlag;

This is scalable to removing multiple flags as well:

dwMyFlags &= ~(dwSomeFlag | dwSomeOtherFlag);

Also, Hungarian notation has outlived its use.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top