算法学习 - 不申请第三个数交换两个整数的值
来源:互联网 发布:淘宝客吸引人的广告词 编辑:程序博客网 时间:2024/05/24 22:43
交换两个数
正常情况我们需要多申请一个变量来交换两个数的值(假设变量为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:假如有更好的办法,可以评论给我,大家一块学习。
0 0
- 算法学习 - 不申请第三个数交换两个整数的值
- 不借助第三个变量交换两个整数的值
- 不引入第三个变量交换两个整数的值
- 不使用第三个变量完成两个整数的交换
- 不使用第三个变量完成两个整数的交换
- 不借助第三个变量,进行两个整数的交换
- 不申请空间交换两个值
- C++[算法]不借助第三个参数,交换两个数的值
- Java中不使用第三个数交换两个数!
- 不借用临时变量交换两个整数的值
- 两个整数交换(不引入第三个变量)
- 不借助第三个变量交换两个整数
- 不借助第三个变量交换两个整数
- 交换两个变量的值,不借助第三个变量的四种方法(学习)
- 不使用第三个变量实现两个整数之间的交换
- 交换两个整数的值
- 交换两个整数的值
- 交换两个整数的值
- 第十五周:项目二:阅读程序
- linux重启后数据盘变成只读
- 但是嘴篆醉谆嘴籽风格啊rlovgt
- UVA11375火柴(递推+大数)
- 商场促销—策略模式
- 算法学习 - 不申请第三个数交换两个整数的值
- route 路由
- 适合IT人自学的几个视频网站
- jsp 用urlrewrite 实现URL 重写
- UVA10294项链和手镯(等价类计数问题)
- Codeforces 3C. Tic-tac-toe
- struts2实现文件下载所出现的乱码,解决方法
- 第十五周项目三:OJ(一)
- nyoj410 how many ones?