2010-04-05 71 views
2
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的訪問權限?在C++中按位設置

如果我在x中有一個特定的值,那麼我如何知道AccessSourceE是否設置?

回答

8

AccessSourceAll的值是因爲(int)0xFFFFFFFF枚舉是int類型的在C.

的未設置只是AccessSourceE使用:

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

要添加,使用

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

爲了測試,

if (x & AccessSourceE) { ... } 
+0

謝謝亞歷克斯.... – Sunil 2010-04-05 10:57:49

3

我不確定它是否真的很重要,因爲它是一個可以清楚地爲每個其他值設置一個掩碼的掩碼。

如果您將它分配給ULONG,它將是一個無符號類型。使用按位邏輯設置/刪除值:

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

謝謝埃文蒂蘭.... – Sunil 2010-04-05 10:58:07

0

您可以使用^運算符來實現此操作。 例如:

unsigned long l_unValue = AccessSource :: AccessSourceAll;

l_unValue = l_unValue^AccessSource :: AccessSourceE;

上述語句將從「AccessSourceAll」中刪除「AccessSourceE」。

+1

這將切換位,不一定刪除它。 – 2010-04-05 11:14:44