如何实现两个数交换的交换以及宏定义的编写

时间:2022-01-28 23:18:41

【语句实现方法】

方法1:不使用中间变量

●利用位运算符

 a = a^b; b = a^b; a = a^b;  →    a^= b^ = a^ = b;(不用考虑越界问题)

【解释】:对于a^a =0, a^0 =a

a = a^b

b = a^b =( a^b) ^b =a^(b ^b) = a^0 = a(交换律)

a = a^b = (a^b) ^a = a^a^b = b; (结合律,并且有a = a^ba = b)

●不使用位运算符

a= a + b; b = a - b;a = a – b; (需要考虑越界问题)

方法2:使用中间变量

temp= a; a = b; b = temp;

【宏定义方法】

方法1

#define SWAP(a,b) \

a= a^b;\

b= a^b;\

a= a^b;

方法2

#define SWAP(a,b) \

a= a + b ;\

b= a - b;\

a= a - b;

【函数实现方法】

方法1利用指针

intswap(int *p,int*q)

{

       int temp;

 

       temp = *p;

       *p = *q;

       *q = temp;

}

方法2利用引用

intswap(int &a,int&b)

{

       int temp;

 

       temp = a;

       a = b;

       b = temp;

}