繁体   English   中英

C ++中的按位设置

[英]Bitwise setting in 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
        };

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

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

AccessSourceAll的值是(int)0xFFFFFFFF因为枚举在C中是int类型。

未设置的AccessSourceE使用:

x & ~AccessSourceE  // to assign: x &= ~AccessSourceE;

要添加,请使用

x | AccessSourceE  // to assign: x |= AccessSourceE;

去测试,

if (x & AccessSourceE) { ... }

我不确定它真的很重要,因为它是一个掩码,显然会为每个其他值设置一个位。

如果要将其分配给ULONG,则它将是无符号类型。 要设置/删除值,请使用按位逻辑:

x |= AccessSourceE; /* set SourceE */
x &= ~AccessSourceE; /* unset SourceE */
if(x & AccessSourceE) /* test SourceE */

您可以使用^运算符。 例如 :

unsigned long l_unValue = AccessSource :: AccessSourceAll;

l_unValue = l_unValue ^ AccessSource :: AccessSourceE;

上述语句将从“AccessSourceAll”中删除“AccessSourceE”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM