标签:
// 交换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