在C中,如何检查是否使用XOR设置了一个位?

Sto*_*Dan 3 c bit-manipulation

我在面试时问了这个问题.假设我必须检查第3位:

 a=0x9004;
Run Code Online (Sandbox Code Playgroud)

我说过的

 if((a<<13>>15)^1==1)
     printf("bit 3 is not set");
 else
     printf("bit 3 is set");
Run Code Online (Sandbox Code Playgroud)

但我觉得这不是他们想要的.

Ser*_* L. 5

if ((unsigned int )a ^ (0x4) < (unsigned int )a) 
    printf("bit 3 is set");
else
    printf("bit 3 is not set");
Run Code Online (Sandbox Code Playgroud)

如果设置了位3(0x4),那么a ^ 0x4将是更小的算术值a.


Pri*_*ley 5

if((a | (1<<2)) ^ a)
   printf("3rd bit is not set");
else printf("3rd bit is set");
Run Code Online (Sandbox Code Playgroud)