异或运算的运用
题目:1.将一个数在二进制状态提取最右侧的1后这个数为多少
2.提取一个数转为二进制有多少个1
public class intGetRightNumber {
public static void main(String[] args) {
//打印提取出最右侧的1后这个数为多少
System.out.println(getNumber(6));
//打印怎么提取一个数转为二进制数有多少个1
System.out.println(getNumberOne(6));
}
//怎么把一个int类型的数,提取出最右侧的1后这个数为多少
static int getNumber(int flag){
int num=flag & ((~flag)+1);//提取最右侧的数1为十进制表示
flag-=num;
return flag;
}
//怎么提取一个数转为二进制数有多少个1
static int getNumberOne(int flag){
//依次提取最右侧的1,并抹去1
int count = 0;//计数器
//如果不为0,表示这个数还有1
while(flag!=0){
//6的二进制0110
int num=flag & ((~flag)+1);//取右侧第一个1结果为0010
flag^=num;//将1抹去后为0100
count++;
}
return count;
}
}
//&表示逻辑运算中的与运算:真真为真(1),其余为假(0)
//int型数据提取最右侧的数 为 N & ((~N) +1)
//~N表示按位取反