问题引出:
如何将a,b交换,且不使用任何中间变量?
方法一:算术运算法
a=a+b; b=a-b; a=a-b;
方法二:逻辑运算法
a=a^b; b=a^b; a=a^b;
若采用宏定义完成此功能,对应有2种方法,如下示例代码:
</pre><pre name="code" class="html">#include<iostream> using namespace std; //宏定义swap(x, y),使之完成交换x,y的值 #define swap1(x, y) \ (y) = (x) + (y); \ (x) = (y) - (x); \ (y) = (y) - (x); #define swap2(x, y)\ x = x^y;\ y = x^y;\ x = x^y; int main() { int a = 3, b = 5; cout<<a<<","<<b<<endl<<endl; swap1(a, b); cout<<a<<","<<b<<endl<<endl; swap2(a, b); cout<<a<<","<<b<<endl; return 0; }
结果如下图:
对于swap1,当输入的数据是不同种类型的话,这个宏的结果是不对的。
对于swap2,只适用于整型数据。