使用异或运算符来完成两数数值交换

本文介绍了如何利用异或运算符在不借助额外空间的情况下完成两个数的值交换。通过分析异或运算的性质,得出连续异或同一个数两次结果不变的结论,并以此为基础给出了相应的Java代码实现。
摘要由CSDN通过智能技术生成

一般人完成两数交换都会使用一个额外的空间temp来暂存一个数的值,之后进行两数交换,即:

public void swap(int[] arr, int a, int b){
   
	int temp = arr[a];
	arr[a] = arr[b];
	arr[b] = arr[a];
}

其实还有另外一个方法来实现两数的交换,即使用异或运算符的方法。
我们知道,在二进制中异或运算的规则如下:

a b Output
0 0 0
0 1 1
1 0 1
1 1 0

即两数相同则输出0,两数不同则输出1。因此,我们可以得到一个结论:任意一个数,连续异或同一个数两次,还等于这个数。
如:10001 ^ 11100 ^ 11100 = 10001
所以,我们可以得到异或运算完成两数数值交换的代码:

public void swap(int[] arr, int a, int b){
   
	arr[a] = arr[a] ^ arr[b]; 
	arr[b] = arr[a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值