首页 > 代码库 > 算法学习 - 不申请第三个数交换两个整数的值
算法学习 - 不申请第三个数交换两个整数的值
交换两个数
正常情况我们需要多申请一个变量来交换两个数的值(假设变量为a, b)。例子如下:
int temp = a;
a = b;
b = temp;
这样子就可以了。但这终究是一种需要申请临时变量的方法,总要去想想临时变量的名字。下面主要介绍两种方法。
直接运算
这种办法简单明了,也是我最喜欢使用的办法,因为即使是浮点型也可以用这种办法,继续假设两个变量是a
和b
。
a = a+b;
b = a - b;
a = a - b;
这样就交换了!是不是很简单。一下没懂的可以找个例子去试试。
逻辑运算
这种办法也不难理解,就是需要小小的解释一下,先看解决办法,就是使用逻辑运算符的异或的运算符,符号为^
。
a = a^b;
b = a^b;
a = a^b;
这样子交换是不是有点不太懂?(PS:假如懂了直接看下一个方法)。其实举个例子就懂了。假设a = 3; b= 2;
,然后我们看看把这两个变量都转换为二进制是多少。一个int型是4个字节,32bit,那些0我就不写了,我只写前4个bit好了。a = a^b;
a=3 = 0 0 1 1
b=2 = 0 0 1 0
----------------
0 0 0 1
现在a的二进制就是0001
了,十进制呢就是1
。现在执行b = a^b;
a=1= 0 0 0 1
b=2= 0 0 1 0
---------------
0 0 1 1
发现了吧,现在b的二进制是0011
了,十进制就是3
了,然后如此执行,a = a^b; 之后a就变为2了。
其他方法
其实这里也是大同小异了,就是我们上面是对a b的值进行异或,那么交换的是值,其实我们可以对 a b的地址进行异或,这样就可以直接交换a b的地址了,当然 a b代表的值也就变了。
详细方法我不写了。和上面一样,不过换成地址而已了。
PS:假如有更好的办法,可以评论给我,大家一块学习。
算法学习 - 不申请第三个数交换两个整数的值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。