[英]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.