import java.util.Arrays;
import java.util.Random;
public class 位运算 {
public static void main(String[] args) {
//数中唯一重复的数
int[] arr = new int[1001];
for (int i = 0; i < 1000; i++) {
arr[i] = i;
}
//填充0~999
arr[1000] = new Random().nextInt(999);
//随机生成一个数
int index = new Random().nextInt(1000);
//交换数据
int temp = arr[index];
arr[index] = arr[1000];
arr[1000] = temp;
//亦或查询
int x = 0;
for (int i = 0; i < 999; i++) {
x = x^i;
}
for (int i = 0; i < 1000; i++) {
x= x^arr[i];
}
System.out.println(x);
//数中1的个数
int num = 999;
int count =0;
for (int i = 0; i < 32; i++) {
if(((num>>>i)&1)==1)
count++;
}
System.out.println(count);
count = 0;
while(num!=0){
num = num&(num-1);
//总会消掉末尾的1
count++;
}
System.out.println(count);
//判断一个数是否为2的x次方
x = 4;
System.out.println((x&(x-1))==0);
x=23;
//二进制奇偶位翻转
int ou = x&0xaaaaaaaa;
System.out.println(Integer.toString(ou,2));
int ji = x&0x55555555;
System.out.println(Integer.toString(x,2));
System.out.println(Integer.toString((ou>>1)^(ji<<1),2));
//double类型转换为二进制小数
double dnum = 0.625;
StringBuilder sb = new StringBuilder("0.");
while (dnum>0){
double r = dnum*2;
if(r>=1){
sb.append("1");
dnum = r-1;
}else{
sb.append("0");
dnum = r;
}
}
System.out.println(sb.toString());
}
}