首先是使用 第三方变量交换两个变量的值;
static void Main(string[] args) { int a = 3; int b = 5; JH(ref a, ref b); Console.WriteLine("a的值是" + a + "b的值是" + b); Console.ReadLine(); } //定义一个 交换的方法 public static void JH(ref int a,ref int b) { int item; item = a; a = b; b = item; }
-------这里实现两个变量的交换,上面的算法最大的缺点就是需要借助一个临时变量。
这里我们可以用三种算法来实现:1)算术运算;2)位运算。
1):算数运算
简单的说就是加减 运算:
int a,b; a=10;b=12; a=b-a; // a=2;b=12 a=2 b=b-a; // a=10;b=12 b=10 a=b+a; // a=12;b=10 a=12
2):位运算
通过异或运算也能实现变量的交换,这也许是最为神奇的,请看以下代码:
int a=10,b=12; //a=1010^b=1100;
a=a^b; //a=0110^b=1100;
b=a^b; //a=0110^b=1010;
a=a^b; //a=1100=12;b=1010;
此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。
即:a^b^b=a。将a=a^b代入b=a^b则得b=a^b^b=a;同理可以得到a=b^a^a=b;轻松完成交换。