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