C++中的按位设置

Sun*_*nil 2 c c++

enum AccessSource
        {
            AccessSourceNull = 0x00000001,
            AccessSourceSec = 0x00000002,
            AccessSourceIpo = 0x00000004,
            AccessSourceSSA = 0x00000008,
            AccessSourceUpgrade = 0x00000010,
            AccessSourceDelta = 0x00000020,
            AccessSourcePhoneM = 0x00000040,
            AccessSourceSoft = 0x00000080,
            AccessSourceCR = 0x00000100,
            AccessSourceA = 0x00000200,
            AccessSourceE = 0x00000400,
            AccessSourceAll = 0xFFFFFFFF
        };
Run Code Online (Sandbox Code Playgroud)

AccessSourceAll的价值是什么?是-1吗?或者它是最大值?我有一个参数ULONG x,其默认值是AccessSourceAll(这意味着访问所有).如何仅删除AccessSourceE的访问权限?如何再次添加AccessSourceE的访问权限?

如果我在x中有特定值,那么我如何知道是否设置了AccessSourceE?

Ale*_*ski 8

AccessSourceAll的值是(int)0xFFFFFFFF因为枚举是intC中的类型.

未设置只是AccessSourceE使用:

x & ~AccessSourceE  // to assign: x &= ~AccessSourceE;
Run Code Online (Sandbox Code Playgroud)

要添加,请使用

x | AccessSourceE  // to assign: x |= AccessSourceE;
Run Code Online (Sandbox Code Playgroud)

去测试,

if (x & AccessSourceE) { ... }
Run Code Online (Sandbox Code Playgroud)