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

时间:2014-02-10 11:26:32

标签: c bit-manipulation

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

 a=0x9004;

我说那个

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

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

3 个答案:

答案 0 :(得分:5)

if ((unsigned int )a ^ (0x4) < (unsigned int )a) 
    printf("bit 3 is set");
else
    printf("bit 3 is not set");

如果设置了第3位(0x4),则a ^ 0x4的算术值将小于a

答案 1 :(得分:4)

if((a | (1<<2)) ^ a)
   printf("3rd bit is not set");
else printf("3rd bit is set");

答案 2 :(得分:2)

仅按要求使用XOR。位计数从0开始到第31位。

#include <stdio.h>
//assuming you count from bit 0, bit 1,bit 2 up to bit 31..
int main(void){

int a = 0x7FFFFFFF;
int check = (1<<3);
check = (a - (check^a) )>0 ? 1:0;
printf("bit 3 of %x is set to %d",a,check);
return 0;
}