不使用临时变量 交换两个数的值
2012-02-24 18:45
239 查看
Question:现有两个int型变量a, b如何才能交换他们的值呢?
对于普通青年来说,按照课本的方法我们需要增加一个临时变量tmp,通过
可是我们是否能够不使用临时变量呢?
答案是肯定的,请看下面代码
我来解释一下为什么能这样做。
两个int型数的异或是按照其二进制位对应的位进行异或
我们假设初始的a和b分别为a(0011)和b(0101) [这样就有00,01,10,11四种不同的异或情况]
执行第一条语句后:
a(0011)
b(0101)
a(0110)
执行第二条语句后:
b(0101)
a(0110)
b(0011)
执行第三条语句后:
a(0110)
b(0011)
a(0101)
显然我们通过3次异或使得a和b的值进行了交换,因为每一位通过这样的异或都能达到交换的目的
所以我们两个数通过这样的异或同样能够达到交换的目的,这样就能不使用临时变量了。
对于普通青年来说,按照课本的方法我们需要增加一个临时变量tmp,通过
tmp = a; a = b; b = tmp;来完成交换。
可是我们是否能够不使用临时变量呢?
答案是肯定的,请看下面代码
a^=b; b^=a; a^=b;如果我们使用异或的方法我们是可以不使用临时变量来交换两个数的值。
我来解释一下为什么能这样做。
两个int型数的异或是按照其二进制位对应的位进行异或
我们假设初始的a和b分别为a(0011)和b(0101) [这样就有00,01,10,11四种不同的异或情况]
执行第一条语句后:
a(0011)
b(0101)
a(0110)
执行第二条语句后:
b(0101)
a(0110)
b(0011)
执行第三条语句后:
a(0110)
b(0011)
a(0101)
显然我们通过3次异或使得a和b的值进行了交换,因为每一位通过这样的异或都能达到交换的目的
所以我们两个数通过这样的异或同样能够达到交换的目的,这样就能不使用临时变量了。
相关文章推荐
- C/C++/Java不使用临时变量实现两个数的交换
- 玩玩小技巧(1)_三种方法不使用临时变量交换两个数的值
- 交换两个数的值以及不使用临时变量交换两个数的值
- 不使用临时变量 交换两个数
- 不使用临时变量交换两个数
- 使用异或运算 不借助临时变量交换两个数
- C语言 不使用临时变量交换两个数
- 交换两个数的值以及不使用临时变量交换两个数的值
- 不使用临时变量交换两个数的值
- 交换两个数不使用临时变量的陷阱
- 不用临时变量交换两个数的值
- 不使用临时变量的情况下,两个变量之间交换值的问题
- c语言不用临时变量交换两个数程序分析
- java语言学习之不使用变量交换两个数
- 不允许创建临时变量,交换两个数的内容(用异或实现)
- 不使用其他变量交换两个数
- 不使用临时变量交换数值
- 交换两个数的值(不使用第三个变量)
- 题目要求:将a,b两个数的值进行交换,并且不使用任何的中间变量。
- 不使用第三个变量交换两个数的值