#include <iostream> using namespace std; //方法一:通过定义临时变量 void swapInt1() { int a=5,b=10; int tmp=a; a=b; b=tmp; cout<<"a:"<<a<<endl; cout<<"b:"<<b<<endl; } //方法二:通过位运算的异或实现 void swapInt2() { int a=5,b=10; a=a^b; b=b^a; a=a^b; cout<<"a:"<<a<<endl; cout<<"b:"<<b<<endl; } int _tmain(int argc, _TCHAR* argv[]) { swapInt1(); swapInt2(); return 0; }
结果如下:
说明:
前两个赋值语句:“a = a ^ b;”和“b = b ^ a;”相当于b = b ^ (a ^ b),而b ^ a ^ b等于a ^ b ^ b。b ^ b的结果为0,因为同一个数与相向相^,结果必为0。因此b的值等于a ^ 0,即a。
再执行第三个赋值语句:“a = a ^ b”。由于a的值等于(a ^ b),b的值等于(b ^ a ^ b),因此,相当于a = a ^ b ^ b ^ a ^ b,即a的值等于a ^ a ^ b ^ b ^ b,等于b。
接下来写一个对一个数组倒序的方法
void swapIntArray() { int array[]={1,20,3,-49,58,-62,75}; int length=0; GET_ARRAY_LENTH(array,length); for (int i = 0; i < length/2; i++) { array[i]=array[i]^array[length-1-i]; array[length-1-i]=array[length-1-i]^array[i]; array[i]=array[i]^array[length-1-i]; } for (int i = 0; i < length; i++) { cout<<array[i]<<endl; } }
其中GET_ARRAY_LENGTH 宏定义如下:
#define GET_ARRAY_LENTH(array,lenth) {lenth = (sizeof(array) / sizeof(array[0]));}
main中调用swapIntArray
int _tmain(int argc, _TCHAR* argv[]) { //swapInt1(); //swapInt2(); swapIntArray(); return 0; }
输出结果:
一句话:good job!