在C中,经常会用到置换,一般情况下,我们都会借助第三个变量进行置换,但是如果你要置换的是两个数字,那么,就有一些节省空间开支的方法了。下面,我列两种常见方法:
1,通过算数
int a,b;
a=b-a;
b=b-a;
a=b+a;
2、异或
a^=b;
b^=a;
a^=b;
对于第一种方法,很好理解,而第二种方法,可能会有些难理解,我说说我的理解。
既然不能用第三个变量,那么a和b中,肯定要毁掉一个变量来进行置换,那么,a和b异或产生了一个数,这个数是异或得到,我们知道,异或的算法是,相同为零,不同为一。也就是说,产生的数字准确的记录了a和b的哪些位相同,哪些位不同,这样,就可以通过b来还原a,也可以通过a来还原b。 |