日期:2014-05-18  浏览次数:20765 次

两个变量不用中间变量如何交换值?
今天去面试,碰到一个题,两个变量不用中间变量如何交换值?
可把我难倒了,请问大虾如何解决?

------解决方案--------------------
编程时,如果碰到需要交换两个变量的值,那么习惯做法是使用一个中间变量,但是这并不是必须的;
可以使用这样的方法:
int a,b;
a=值1;
b=值2;
//交换
a=a^b;
b=b^a;
a=a^b;
//此时,a和b的值已经交换了;

证明:
a1=a0^b0;
b1=b0^a1=b0^(a0^b0)=a0^b0^b0=a0;
a2=a1^b1=(a0^b0)^a0=b0^a0^a0=b0;

应用的主要原理就是一个值经过同一个数的两次异或后值不变!
------解决方案--------------------
int a = 3;
int b = 5;

a = a ^ b;
b = a ^ b;
a = a ^ b;
------解决方案--------------------
int a = 3
int b = 5

a = a + b
b = a - b
a = a - b
------解决方案--------------------
int a=5,b=1;

a=a-b;
b=a+b;
a=b-a;

/*
a=a+b;
b=a-b;
a=a-b;

*/