首先是使用 第三方变量交换两个变量的值;
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;轻松完成交换。