簡體   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