------------------------------ASP.Net+Android+IO开发 .Net培训 期待与您交流!------------------------------
(1)通过第三方变量
int n=3,m=6;
int temp;
temp=n;
n=m;
m=temp;
(2)不用第三方变量[如果n和m的值非常大,容易超出int范围]
int n=3,m=6;
n=n+m;
m=n-m;
n=n-m;
(3)通过异或
int n=3,m=6;
n=n^m;
m=n^m;
n=n^m;
以下是自己对此方法的理解:
(此方式用的原理是 n=n^m^m 及一个数亦或另一个数两次 及还是这个数本身 下面我们验证一下)
n=3写成二进制是00000011
m=6写成二进制是00000110
我们先来看下 n^m 结果
00000011
^ 00000110
-----------------------
00000101
及 n^m = 3^6 = 5
我们再用5^6试试
00000101
^ 00000110
----------------------
00000011
及5^6 = 3
也就是 n^m^m = 3^6^6 = 3
这是它的原理 这个原理在真正实践中被用来加密 因为中间数(6)只有本人知道 所以 要想解密就必须知道这个中间数
下面我们就来看下
int n , m ;
n = n^m;
m = n^m;
n = n^m;
它每一步都是将 n储存空间的数据 与 m储存空间的数据 进行异或 你要理解 在每一步 这两个储存空间的值 是多少
n存储空间 m储存空间
n m
|
|
n = n^m;
|
|
n存储空间 m储存空间
n ^ m m
|
|
m = n^m = (n^m)^m = n;
|
|
n存储空间 m储存空间
n ^ m n
|
|
n = n^m=(n^m)^n=m;
|
|
n存储空间 m储存空间
m n
------------------------------ASP.Net+Android+IO开发 .Net培训 期待与您交流!------------------------------