不使用临时变量交换两个整数变量

本文探讨了变量交换的传统方法与异或运算的创新技巧,详细解析了异或运算如何在不使用额外变量的情况下实现两个整数变量的交换,展示了其背后的数学原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码实例

先看一下交换变量的常规方式:

public static void swap1() {
	int i = 1, j = 5;
	System.out.println("i:" + i + ",j:" + j);
	int tmp=i;
	i = j;
	j = tmp;
	System.out.println("i:" + i + ",j:" + j);
}

输出:

i:1,j:5
i:5,j:1

使用临时变量存储一下其中一个值,这种方法所有人都知道,且可以交换任何变量。

如果是int或者long等整数变量,还可以通过以下方式交换:

public static void swap2() {
	int i = 4, j = 5;
	System.out.println("i:" + i + ",j:" + j);
	i = i ^ j;
	j = i ^ j;
	i = i ^ j;
	System.out.println("i:" + i + ",j:" + j);
}

输出:

i:4,j:5
i:5,j:4

从代码可以看出,经过3次异或变量就换掉了。

什么是异或

要理解上面交换原理,我们先看看什么是异或:

-变量1变量2变量3
值1110
值2010
结果100

二进制异或的结果是:不同为1,相同为0

实例分析

以上例子中,第一次异或,结果=1:

-变量1变量2变量3
值1100
值2101
结果001

得出结果001就类似中间变量,在下面两次异或时,都得到另一个变量的值(4去异或就得到5,5去异或就得到4)

第二次异或,结果=4:

-变量1变量2变量3
值1001
值2101
结果100

第三次异或,结果=5:

-变量1变量2变量3
值1001
值2100
结果101

注意:这种交换变量方法也只适用于整数,float、double之类的是不行的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顽石九变

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值