不使用临时变量交换两个数之异或运算

不使用临时变量来实现两个数的交换

这里我们就要提出一种新的方法,我们常见的交换就是先定义一个临时变量,一般都是:int temp = 0;int a = 3;int b = 5; 然后temp = a; a = b;b = temp;这样的交换方式是很常见的。今天来介绍一种异或运算来解决此问题。

首先,我们要知道什么叫异或:我之前记的方式是跟书上的一样相同为0,异为1;这里说的是在二进制的情况下0,1。当然十进制的数在计算机底层计算的时候也是转为二进制来运算的。所以我们十进制也可以使用逻辑运算。
我现在叫异或运算(符号为:^)为: 无进位相加;所以当一个数为 N时 就有N ^ 0 = N ,N ^ N = 0。这里直接写两个数去推算一下。异或运算还有交换律这种性质,为我们后续两个数交换作铺垫。

import java.util.Scanner;

//不使用临时变量实现两个数的交换
public class vriableExchange {
	public static void main(String[] args) {
		Scanner sr = new Scanner(System.in);
		System.out.print("请输入a:");
		int a = sr.nextInt();
		System.out.print("请输入b:");
		int b = sr.nextInt();
		exchange(a, b);
	}
	static void exchange(int a,int b){
		a=a^b;
		b=a^b;//b=a^b^b=a;
		a=a^b;//a=a^b^a=a^a^b=b;
		System.out.println("交换后a:"+a+"\n"+"交换后b:"+b);
	}
}
//异或:无进位相加; 0^N = N    N^N = 0;
//注意如果两个数指向同一块内存(地址),则发生交换失败。例如数组a[1]与a[1]交换  结果a[1]=0;

解释一下:a=a ^ b; b=a ^ b; a=a ^ b; 这三条语句
当a = a^b时,b=(a ^ b) ^ b = a 这里为什么b=a是因为我们上面0 ^ N = N N ^ N = 0; 到第三条 a = a ^ b = (a ^ b ) ^ a = b 。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值