博主头像
7024w的自留地

觉宇宙之无穷,识盈虚之有数

位运算代码

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());


}
}
发表新评论