早上出门前看时间还早,反正出去等公交也是等,就捞起垫桌脚的一本书(C程序设计),随便翻了翻,看到下面这个方法,记录下来,说不定哪天就用到了:
原作者:菩提树下的杨过
出处:http://yjmyzz.cnblogs.com
1 using System; 2 3 namespace test 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 int x = 3; 10 int y = 4; 11 12 Console.WriteLine("x={0},y={1}", x, y);//x=3,y=4 13 14 x = x ^ y; 15 y = y ^ x; 16 x = x ^ y; 17 18 Console.WriteLine("x={0},y={1}", x, y);//x=4,y=3 19 20 Console.WriteLine(1 ^ 0); //1 21 Console.WriteLine(0 ^ 0); //0 22 Console.WriteLine(1 ^ 1); //0 23 Console.WriteLine(0 ^ 1); //1 24 25 Console.ReadKey(); 26 } 27 } 28 }
明白原理了吗?就是利用异或操作,从最后1,0异或操作的结算来看,异或操作有二个基本特性:
1、满足交换律(即1^0 和 0^1结果相同)
2、相同为0,相异为1(即不同为1)
所以来仔细看下:
x = x ^ y
y = y ^ x 相当于 y = y ^ (x ^ y) = x ^ y ^ y (交换律) = x ^ 0 (y跟y相同,异或结果为0) = x (x跟0异或的结果,内部二进制中的每一位都不变,最终还是x)
这样最终y的值就变成了x
再继续
x = x ^ y 相当于 x = (x ^ y) ^ (y ^ (x ^ y))-即把上面的公式继续替换过来 = x ^ x ^ y ^ y ^ y (交换律) =0^ y ^ 0 (最前面的x ^ x 为0,最后的 y ^ y也为0) = y
这样最终x的值就变成了y
作者:菩提树下的杨过
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。