(1) 例如检查一个数X的第n位是否为1,我们可以通过下面的算法实现:
int nBitCheck=(x&pow(2,n-1))/pow(2,n-1);如果返回的是1,则第n位为1,若果是0,则为0;
我们可以通过>>和<<运算符,可以建立位模式屏蔽掉某些位,检查x的第n位是否为1,
int nBitCheck=(x&(1<<n-1))>>(n-1);
(2)统计一个数X(一个字长16位)中1的个数,int bitCount(unsigned int x)
{
n=0;
for(i=1;i<=16;i++){ n+=(x&(1<<i-1)>>(i-1)); }
return n;
}
还可以用下面的方法:
int bitCount(unsigned int x)
{
unsigned int temp;
temp=x-((x>>1)&033333333333)-((x>>2)&011111111111);
return ((tmp+(tmp>>3))&030707070707)%63;
}
上面的你看懂了么!~是不是觉得很Magical!
(3)可以用^(异或)去实现两个数的交换,并且不需要额外的空间,可以拿来娱乐的小算法:
void swap_fun(int *x,int*y)
{
*x=*x^*y;
*y=*x^*y;
*x=*x^*y;
}
/**
以上算法没经过实际测试,只是自己推导的
*/