交换两个整数:通常有三种方法。 很简单,就是交换两个整数的值。
======================================================
#include <stdio.h>
void swap1(int *a, int *b) //第一种
{
static int temp=0;
printf("temp=%d",temp);
temp = *a;
*a = *b;
*b = temp;
printf("temp=%d",temp);
}
void swap2(int *a,int *b) //第二种
{
*a = *a+*b;
*b = *a-*b;
*a = *a-*b;
}
void swap3(int *a,int *b) //第三种
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
===========================================================================
第一种,使用了中间变量。最常用,也是最基本的。需要注意的是参数要用指针型或者是引用型的。
第二种,不需要中间变量。要考虑是否会溢出!
第三种,不需要中间变量。使用异或达到交换目的。还有牛人写成a ^= b^= a ^= b;汗~ 就是a=a^(b=b^(a=a^b))
============================================================================
异或:^是一种位运算-----相同为0,不同为1
// 譬如:a=7^3;
// 0111 ------- 7
// 0011 ------- 3
// ^______ ^____
// 0100 4
// 然后再翻过来: 4^3
// 0100 ------- 4
// 0011 ------- 3
// ^______ ^____
// 0111 7
===========================================================================
还有第四种方法:(闲的蛋疼)谈不上第四种,其实和第二种是一样的,加减乘除,幂和开方都可以实现。
原理都是可逆运算。只是他们的准确性和速度与加减是没法比较的。
void swap(int *a, int *b)
{
*a *=*b;
*b =*a / *b;
*a = *a / *b;
}
==========================================================================
#include <stdio.h>
void swap1(int *a, int *b) //第一种
{
static int temp=0;
printf("temp=%d",temp);
temp = *a;
*a = *b;
*b = temp;
printf("temp=%d",temp);
}
void swap2(int *a,int *b) //第二种
{
*a = *a+*b;
*b = *a-*b;
*a = *a-*b;
}
void swap3(int *a,int *b) //第三种
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
int main()
{
int a = 10;
int b = 20;
int temp=1000;
swap1(&a,&b);
swap1(&a,&b);
//swap2(&a,&b);
//swap3(&a,&b);
printf("a=%d b=%d temp=%d",a,b,temp);
return 0;
}
============================================================================
以上参考网络资料~转载请注明出处~
参考资料:http://topic.csdn.net/u/20080831/02/50ea55c1-a5e7-40ee-9450-2b6482348f0d.html
http://blog.csdn.net/yxin1322/article/details/565564
纪念乔布斯~伟大的天才~