C# 多种方法实现交换两个整型变量的值
N个星期前面试的时候遇到过这样的试题:
在不适用第三个变量的情况下,交换a与b的值,a=10,b=20;
当时我用加减法做了出来,回来谷歌了一下,原来还有其他方法。
/*定义两个int类型变量a, b, 分别赋值为 a = 10 , b = 20 有多少种算法使得变量 a b 交换数值, 即令 a = 20 b = 10。 */ // 方法一, 常规方法,设置第三方临时变量 int a = 10; int b = 20; int temp; //设计第三方临时变量 temp = a; a = b; b = temp; Console.WriteLine("方法一:取第三方临时变量"); Console.WriteLine("a = {0},b = {1}", a, b); Console.ReadKey(); // 方法二 加减法 a = 10; //重新赋值 b = 20; //重新赋值 a = a + b; //此条语句使得 a = 10 + 20; b = a - b; //此条语句使得 b = 30 - 20 = 10; a = a - b; //此条语句使得 a = 30 - 10 = 20; Console.WriteLine("方法二:加减法"); Console.WriteLine("a = {0},b = {1}", a, b); Console.ReadKey(); // 方法三 乘除法 (要求 b 不能为0) 此方法与加减法类似,但要求b不能为零 a = 10; b = 20; a = a * b; // a = 200 b = a / b; // b = 10 a = a / b; // a = 20 Console.WriteLine("方法三:乘除法"); Console.WriteLine("a = {0},b = {1}", a, b); Console.ReadKey(); // 方法四 异 或 法 我认为此算法和前两种理论上是一样的 只是变为位运算而已 a = 10; //a的二进制表示 001010 b = 20; //b的二进制表示 010100 a = a ^ b; //a 的二进制表示 100001 b = a ^ b; //b 的二进制表示 001010 a = a ^ b; //a 的二进制表示 010100 Console.WriteLine("方法四:异或位运算方法"); Console.WriteLine("a = {0},b = {1}", a, b); Console.ReadKey();
这异或的运算模式看了这实例我才明白是怎么回事,以前老师讲课的时候好像不是这么回事…………..