[英]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
};
What is the value of AccessSourceAll ?? AccessSourceAll的价值是什么? is it -1?
是-1吗? or is it maximum value?
或者它是最大值? I have a parameter ULONG x , whose default value is AccessSourceAll(that means access to all).
我有一个参数ULONG x,其默认值是AccessSourceAll(这意味着访问所有)。 How do i remove the access right of AccessSourceE only?
如何仅删除AccessSourceE的访问权限? How to add the access right of AccessSourceE again?
如何再次添加AccessSourceE的访问权限?
If i have a particular value in x, then how do i know whether AccessSourceE is set or not? 如果我在x中有特定值,那么我如何知道是否设置了AccessSourceE?
The value of AccessSourceAll is (int)0xFFFFFFFF
since enum is of type int
in C. AccessSourceAll的值是
(int)0xFFFFFFFF
因为枚举在C中是int
类型。
The unset just AccessSourceE
use: 未设置的
AccessSourceE
使用:
x & ~AccessSourceE // to assign: x &= ~AccessSourceE;
To add, use 要添加,请使用
x | AccessSourceE // to assign: x |= AccessSourceE;
To test, 去测试,
if (x & AccessSourceE) { ... }
I'm not sure it'll actually matter since it is a mask which will clearly have a bit set for each of the other values. 我不确定它真的很重要,因为它是一个掩码,显然会为每个其他值设置一个位。
If you are assigning it to a ULONG, it will be an unsigned type. 如果要将其分配给ULONG,则它将是无符号类型。 To set/remove values use bitwise logic:
要设置/删除值,请使用按位逻辑:
x |= AccessSourceE; /* set SourceE */
x &= ~AccessSourceE; /* unset SourceE */
if(x & AccessSourceE) /* test SourceE */
You can use the ^ operator for this. 您可以使用^运算符。 For Example :
例如 :
unsigned long l_unValue = AccessSource::AccessSourceAll; unsigned long l_unValue = AccessSource :: AccessSourceAll;
l_unValue = l_unValue ^ AccessSource::AccessSourceE; l_unValue = l_unValue ^ AccessSource :: AccessSourceE;
The above statement will remove "AccessSourceE" from "AccessSourceAll". 上述语句将从“AccessSourceAll”中删除“AccessSourceE”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.