我在面试时问了这个问题。 假设我必须检查第3位:
a=0x9004;
我说那个
if((a<<13>>15)^1==1)
printf("bit 3 is not set");
else
printf("bit 3 is set");
但我觉得这不是他们想要的。
答案 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;
}