版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012351051/article/details/81153377
我们偶尔会使用swap翻转函数,我们一般想到的实现方式如下:
void swap(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
上面的代码还是比较容易理解的,使用一个中间变量即可。
下面还有一种比较巧妙的方式:
如下所示:
void swap(int* a, int* b)
{
*a ^= *b ^= *a ^= *b;
}
乍一看,一脸懵逼吧,反正我是比较懵逼的,但是自信分析后,才发现,却是能实现,分析如下:
void swap(int* a, int* b)
{
*a ^= *b ^= *a ^= *b;
}
假设定义: *a = 1 *b = 2
*a ^= *b ^= *a ^= *b;
0001 ^ 0010 = 0011 *a = 0011
0010 ^ 0011 = 0001 *b = 0001 = 1
0011 ^ 0001 = 0010 *a = 0010 = 2
其中"^"为异或运算,也实现了数据的翻转。如果说这个有什么优点的话,可能就是它是直接通过指针,也就是地址进行运算的,可能运算速度更快吧,当然缺点就是让人一下子懵逼,可以装逼用吧。