其他分享
首页 > 其他分享> > 如何在不使用中间变量的情况下交换两个数?

如何在不使用中间变量的情况下交换两个数?

作者:互联网

使用^(异或)符号,^符号通常用于位运算。

当两个位相同时^运算为0,不相同时为1;

对于三个数,^运算满足交换律:(a^b)^c=a^(b^c);

因此我们可以使用异或运算进行两个数的交换,代码实现如下:

public static void swap(int i,int j) {
		i=i^j;
		j=i^j;
		i=i^j;
	}

现在进行逐段分析:

第一段:

i=i^j;

假设i为a,j为b,则i临时被赋值为a^b

第二段:

j=i^j;

因为在第一段里i已经被赋值为a^b,而j=b,所以这里i^j=(a^b)^b,由于异或交换律,所以也可变为a^(b^b),同一个数对他自己异或结果为0,所以又等于a^0,而一个数对0异或运算等于他自身,所以最后j=a;

第三段:
 

i=i^j;

这里i还是a^b,而j=a;所以i^j=(a^b)^a,同样使用异或交换律,使原式等于(a^a)^b,有第二段可得这里等于0^b,等于b,所以最后i=b;

这里最终完成了i和j的交换。

但是使用也有条件就是交换的两个数不能指向同一个地址

标签:交换律,变量,数对,交换,中间,异或,等于,运算
来源: https://blog.csdn.net/GrandeLai/article/details/121938098