交换两个变量的值(不使用第三个变量)

Posted pengchangwen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了交换两个变量的值(不使用第三个变量)相关的知识,希望对你有一定的参考价值。

问题:不使用第三个变量(也不能使用特殊函数),以达到交换变量值的目的?
如:int a = 9, b = 10; 有什么办法使得他们交换呢?

办法一:拐弯抹角“相加”之方案
语句是这样的:
  a = a + b; // a = 9 + 10
  b = a - b; // b = 19 - 10
  a = a - b; // a = 19 - 10
然后你就会陡然发现,它的值居然交换了!是不是很不可思议?没错,就是这样拐弯抹角的交换了,如果没见过这种方案的还真一时半会想不出其他办法。

办法二:使用不怎么经常使用的“异或“运算符技术分享图片
来,复习一下异或运算。
首先来看一下真值表:

技术分享图片

a的二进制:技术分享图片,即1001

b的二进制:技术分享图片,即1010

那么:

  a = a ^ b;  // 即a = 1001 ^ 1010, 结果a = 0011

  b = a ^ b;  // 即b = 0011 ^ 1010, 结果b = 1001

  a = a ^ b;  // 即a = 0011 ^ 1001, 结果a = 1010

最后a的十进制最终结果为10,b的最终结果为9。看,是不是又偷偷的交换了值?

 









以上是关于交换两个变量的值(不使用第三个变量)的主要内容,如果未能解决你的问题,请参考以下文章

Golang中交换两个变量的值,但是不允许使用第三个变量?

交换两个变量的值(不使用第三个变量)

javajava 如何不使用第三个变量来交换两个数的值

PHP 不使用第三个变量实现交换两个变量的值

交换两个数的值,不适用第三个变量

PHP 不使用第三个变量实现交换两个变量的值