Java中异或运算实现两个整数的交换以及其功能函数实现

       今天学习到一种超酷炫的交换两个整数的方法,给各位分享一下。异或运算属于位运算的一种,首先简单介绍一下异或预算的语法规则。

假设a与b为不相等的两个整数。

(1)a^a=0;

(2)a^b=1;

(3)a^0=a;

(4)a^b=b^a,即异或满足交换律。

(5)(a^b)^c=a^(b^c),即异或满足结合律。

     接下来介绍一下异或运算实现两个整数交换的原理,同样假设a与b为两个不相等的整数。

第一步:a=a^b。此时a=a^b;

第二步:b=a^b。因为上步a=a^b,所以此时b=a^b=(a^b)^b=a^(b^b)=a^0=a;

第三步:a=a^b。因为上步a=a^b,b=a,所以此时a=a^b=(a^b)^a=(b^a)^a=b^(a^a)=b^0=b。

<span style="font-size:18px;">public class Test1 {
public static void main(String[] args) {
	int a=5;
	int b=2;
	System.out.println("交换后:a="+a+", b="+b);
	a=a^b;
	b=a^b;
	a=a^b;
	System.out.println("交换后:a="+a+", b="+b);
}
}</span>

异或运算操作简单,运算速度快,且不需要开辟额外的内存空间。是不是很酷炫呢?有时候为了编码需要,我们要将这样的功能封装在一个函数体中,但如下所示的方法是不能实现两个整数的交换的,只是交换了a和b的地址而已。

<span style="font-size:18px;">private void swap(int a,int b) {
	int t=a;
	a=b;
	b=t;
}</span>

java中没有指针和引用的概念,我们没有办法像C那样在函数体中通过传递引用来实现两个整数的交换,那么要怎么做呢?我们可以借助数组来完成,数组的索引相当于C中的指针。我们通过异或运算和建立临时变量两种方法来分别说明使用如何使用数组来实现交换的功能函数。

<span style="font-size:18px;">public class Test2 {
public static void main(String[] args) {
	int a=5;
	int b=2;
	int []f=new int[2];
	f[0]=a;
	f[1]=b;
	System.out.println("交换后:a="+a+", b="+b);
	swapByBit(f);
	System.out.println("通过异或交换:a="+f[0]+", b="+f[1]);
	swapByTemp(f);
	System.out.println("通过临时变量交换:a="+f[0]+", b="+f[1]);
}
private static void swapByBit(int []f) {
	f[0]=f[0]^f[1];
	f[1]=f[0]^f[1];
	f[0]=f[0]^f[1];
}
private static void swapByTemp(int []f) {
	int t=f[0];
	f[0]=f[1];
	f[1]=t;
}
}
</span>

 





  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值