与运算的常见用法:
1)取一个数的二进制位的后n位的整数
见我上次写的那篇博客
2)判断一个数是否是2的n次幂
//判断一个数是否是2的n次幂
public boolean IsNCiMi(int n){
if(n ==0)
return false;
//将那个数与他的本身减一相与
if((n&(n-1))==0)
return true;
return false;
}
假如一个数是2的n次幂,则它一定可以表示成100....00;中间可以是n个0;则n-1一定是1111....11的形式。如16的二进制表示为10000,则16-1表示的二进制位1111;16与(16-1)相与的结果一定是为0;如果一个数不是2的n次幂,则它与上它的(n-1),得到的一定是一个大于0的数。
3)计算有多少个1
//输入int 类型的n,输出转成二进制后有多少个1;
public int Count( int n){
int count = 0;
if(n<0)
return -1;
while(n!=0)
{
count++;
n=n>>;
}
return count;
}
计算多少个1,主要是要将这个数向右移位然后判断是否为0,以0为判断是否为循环的中点。