标签:
// 交换a和b.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
void swap1(int& a, int& b)
{
int c = a;
a = b;
b = c;
}
/*
加减法运算达到交换a和b,缺点:做a+b 和 a-b运算时可能会导致数据溢出。
*/
void swap2(int& a, int& b)
{
a = a+b;//使用加减运算完成交换
b = a-b;
a = a-b;
}
/*
利用异或:
异或: 对应的二进制位 如果相同则为0,不形同则为1
按位与: 只要有一个为0 就为0
按位或: 只要有一个为1 就为1
*/
void swap3(int& a, int& b)
{
a = a^b;
b = b^a;
a = a^b;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a1 = 1, b1 = 2;
int a2 = 3, b2 = 4;
int a3 = 5, b3 = 6;
int a = 2147483647, b = 23232323;//虽然这里产生了溢出,但是编译运行还是交换了数据,应该是编译器内部做了处理优化
swap1(a1,b1);
printf("a1=%d, b1=%d\n",a1,b1);
swap2(a2,b2);
printf("a2=%d, b2=%d\n",a2,b2);
swap3(a3,b3);
printf("a3=%d, b3=%d\n",a3,b3);
swap2(a,b);
printf("a=%d, b=%d\n",a,b);
getchar();
return 0;
}标签:
原文地址:http://blog.csdn.net/djb100316878/article/details/43193733