交换两个整型变量,你最常用的方法是什么?
相信大部分人的思路都差不多,就是通过创建新的中间变量来完成
例如:
int main()
{
int a = 2;
int b = 3;
printf("交换前: a==%d b==%d\n", a, b);
int tmp = a;
a = b;
b = tmp;
printf("交换后: a==%d b==%d\n", a, b);
return 0;
}
运行结果如下:
但是,如果禁止创建新的变量,你又该如何实现?
接下来我给大家推荐两个我使用的方法:
1. 数学加减实现
首先我们来看代码
int main()
{
int a = 2;
int b = 3;
a = a + b;//a==5 ,b==3
b = a - b;//a==5 ,b==2;
a = a - b;//a==3 ,b==2
printf("%d %d", a, b);
return 0;
}
这段代码的实现过程是根据数学思想实现的
先使 a 的值成为两者之和 5,然后用 a 减去 b 的值 2 赋值给 b,实现了将 a 的值交换给 b,然后再用 a 的值减去现在的 b 的值 3 赋值给 a,就实现了将 b 的值交换给 a。
2. 逻辑运算实现
还是先来看一下代码
int main()
{
int a = 2;
int b = 3;
a = a ^ b; //a==(a^b) ,b==b
b = a ^ b; //a==(a^b) ,b==(a^b)^b==a
a = a ^ b; //a==(a^b)^a==b, b==a
printf("%d %d", a, b);
return 0;
}
这段代码的实现过程是根据逻辑运算实现的
首先我们介绍一下逻辑操作符:异或( ^ )
异或操作符最常用的特点是,相同为0,相异为1
和本身异或的结果为0,和0异或的结果是其本身
相信现在你结合代码的注释就能很好的理解其过程了。其本质思想和第二种方法并没有本质上的区别,异或的具体实现方式是根据其整形的反码实现的,具体实现过程不做详细介绍,感兴趣的可以关注我接下来的博客。
以上就是我对整形交换现有的所有了解,共有三种方法可供选择,如果你有更好的思路和方法,欢迎和我一起交流探讨!