2010-04-05 4 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 
     }; 

Quelle est la valeur d'AccessSourceAll? est-ce -1? ou est-ce la valeur maximale? J'ai un paramètre ULONG x, dont la valeur par défaut est AccessSourceAll (c'est-à-dire l'accès à tous). Comment supprimer le droit d'accès d'AccessSourceE uniquement? Comment ajouter à nouveau le droit d'accès d'AccessSourceE?Paramétrage au niveau du bit en C++

Si j'ai une valeur particulière dans x, alors comment puis-je savoir si AccessSourceE est défini ou non?

Répondre

8

La valeur de AccessSourceAll est (int)0xFFFFFFFF depuis ENUM est de type int en C.

Le unset juste AccessSourceE utilisation:

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

Pour ajouter, utilisez

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

Pour tester,

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

Merci Alex .... – Sunil

3

Je ne suis pas sûr que ce soit important puisque c'est un masque qui aura clairement un peu de valeur pour chacune des autres valeurs.

Si vous l'attribuez à un ULONG, ce sera un type non signé. Pour définir/supprimer des valeurs, utilisez la logique au niveau du bit:

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

Merci Evan Teran .... – Sunil

0

Vous pouvez utiliser l'opérateur^pour cela. Par exemple:

unsigned long l_unValue = AccessSource :: AccessSourceAll;

l_unValue = l_unValue^AccessSource :: AccessSourceE;

L'instruction ci-dessus va supprimer "AccessSourceE" de "AccessSourceAll".

+1

Cela va basculer le bit, pas nécessairement l'enlever. –

Questions connexes