位运算交换值、统计出现次数、交换位置(2022-02-02)

package demo;

public class P3q1 {

	public static void main(String[] args) {
		int a=5;
		int b=10;
		
		System.out.println("[a]"+a+"[b]"+b);
		//三次异或,交换a、b的值
		a=a^b;		//a=a^b
		b=a^b;		//b=(a^b)^b=a,异或满足结合律、交换律
		a=a^b;		//a=(a^b)^a=b
		System.out.println("[a]"+a+"[b]"+b);
	}

}

package demo;

import java.util.Arrays;
import java.util.Random;

public class P3q2 {
	//长度31的数组中,放1~30和一个重复数字,每个元素只许访问1次,求解重复的数字
			//相同数字异或,偶数个消去为0,奇数个还是本身;巧用异或,效率高
	public static void main(String[] args) {
		int n = 30;
		int[] arr=new int[n+1];
		for(int x=0;x<arr.length-1;x++) {
			arr[x]=x+1;
		}
		arr[n]=new Random().nextInt(30)+1;
		System.out.println(Arrays.toString(arr));
		
		int temp=0;
		for(int x=1;x<n+1;x++) {
			temp=temp^x;
		}
		for(int x=0;x<arr.length;x++) {
			temp=temp^arr[x];
		}
		System.out.println("[重复出现的数字]"+temp);
	}

}

package demo;

import java.util.Random;

public class P5 {
	//求二进制中1的个数
	//	(x-1)&x		可以去除最右边的1,那么1的个数=去除次数
	public static void main(String[] args) {
		int x=new Random().nextInt(10)+1;
		int count=0;
		System.out.println("x的值:"+x);
		System.out.println("对应二进制:"+Integer.toString(x, 2));
		while(x!=0) {
			x=(x-1)&x;
			count++;
		}
		System.out.println("1的个数:"+count);
	}

}

package demo;

public class P7 {
	//要求:交换二进制数字的奇偶位,如1~8位  0101 0110(86)交换后为  1010 1001(169)
	public static void main(String[] args) {
		int a=86;
		System.out.println(a);
		System.out.println(Integer.toString(a, 2));
		
		int x=a&(0b10101010);	//保留奇数位
		int y=a&(0b01010101);	//保留偶数位
		int b=(x>>1)|(y<<1);	//奇数位右移1位,偶数位左移1位,完成位置交换,然后再组合
		System.out.println(b);
		System.out.println(Integer.toString(b, 2));
	}

}

package demo;

public class P8 {
	//用二进制表示小数,小数点后超过10位报error
	public static void main(String[] args) {
		double x=0.625;
		StringBuffer bs=new StringBuffer("0.");
		
		while(x>0) {
			x=x*2;		//乘2取整
			
			if(x>=1) {
				bs.append('1');
				x=x-1;
			}
			else {
				bs.append('0');
			}
			
			if(bs.length()>12) {
				System.out.println("error");
				return;
			}
			
		}
		System.out.println(bs.toString());
		
	}

}

posted @   fighterk  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示